《多处理器编程的艺术》读书笔记(3)--- 双线程解决方案
摘要:我们先从两个虽然存在不足但却十分有趣的锁算法讲起。LockOne类双线程的锁算法遵循以下两点约定:线程的标识为0或1,若当前调用者的标识为i,则另一方为j = 1 - i;每个线程通过调用ThreadID.get()获取自己的标识。用writeA(x = v)表示A将值v赋予域x,用readA(v == x)表示A从域x中读取值v。在值不重要的情形下,可以省略v。下图的writeA(flag[i]...
阅读全文
posted @
2009-09-30 17:25
汝熹
阅读(1281)
推荐(0) 编辑
《多处理器编程的艺术》读书笔记(2)--- 互斥
摘要:互斥是多处理器程序设计中最常见的一种协作方式。我们将某一资源放入临界区内:某个时刻仅能被一个线程执行,称这样的特征为互斥。实现互斥的标准方法就是采用一个具有以下接口的ILock对象。[代码]一个线程若执行了setlock()方法调用,则称该线程获得一个锁(或称上锁);若执行了unlock()方法调用,则称该线程释放这个锁(或称开锁)。上面共享计数器的实现中,就是使用ILock域来保证对象的互斥特性...
阅读全文
posted @
2009-09-29 10:40
汝熹
阅读(641)
推荐(0) 编辑
《多处理器编程的艺术》读书笔记(1)--- 并行的困境和加速比
摘要:从单处理器升级到n路关联多处理器应该提高了n倍的计算能力,实际是这样吗?假设有5个朋友要粉刷一套有5个房间的屋子。如果所有房间大小都一样,那么可以指定每人负责一间,只要这5个人以同样的速度来粉刷,就能获得相当于由一个人完成整个粉刷工作5倍的加速比。如果每个房间的大小不一,问题就复杂多了。例如,若有一个房间是其他房间的2倍,那么这5个人同时工作就不可能获得5倍的加速比,因为整个任务的完成时间取决于粉...
阅读全文
posted @
2009-09-28 19:38
汝熹
阅读(780)
推荐(0) 编辑