Pennant的日常
分享工作上的点点滴滴
posts - 75,comments - 21,views - 66454
10 2009 档案
《多处理器编程的艺术》读书笔记(7)--- CLH队列锁
摘要:ALock并发线程的最大个数为一个已知的界限N,同时也要为每个锁分配一个与该界限大小相同的数组。 就算一个线程每次只访问一个锁,同步L个不同对象也需要O(LN)大小的空间。CLHLock[代码] 类QNode的布尔型Locked属性记录了每个线程的状态。如果Locked为true,则对应的线程要么已经获得到锁,要么正在等待锁;如果Locked为false,则对应的线程已经释放了锁。线程被顺序地排入... 阅读全文
posted @ 2009-10-23 22:32 汝熹 阅读(2211) 评论(1) 推荐(0) 编辑
《多处理器编程的艺术》读书笔记(6)--- 队列锁
摘要:在BackoffLock算法中有两个问题:1.cache一致性流量:所有线程都在同一个共享存储单元上旋转,每一次成功的锁访问都会产生cache一致性流量(尽管比TASLock低);2.临界区利用率低:线程延迟过长,导致临界区利用率低下。 可以将线程组织成一个队列来克服这些缺点。在队列中,每个线程检测其前驱线程是否已完成来判断是否轮到自己。让每个线程在不同的存储单元上旋转,从而降低cache一致性流... 阅读全文
posted @ 2009-10-22 23:35 汝熹 阅读(824) 评论(0) 推荐(0) 编辑
《多处理器编程的艺术》读书笔记(5)--- 自旋锁(2)
摘要:争用指多个线程试图同时获取一个锁;高争用意味着存在大量正在争用的线程;低争用的意思与高争用相反。在TTASLock类中,setlock()方法使用了两个步骤:它不断地读锁,当锁看似空闲时,则尝试获得锁。如果其他的某个线程在第一步和第二步之间获得了锁,那么该锁极有可能存在高争用。显然,试图获得一个存在高争用的锁是一种应该回避的情形。此时线程获得锁的机会非常小,因为这种尝试将会导致总线流量的增加(导致... 阅读全文
posted @ 2009-10-20 20:19 汝熹 阅读(531) 评论(0) 推荐(0) 编辑
《多处理器编程的艺术》读书笔记(4)--- 自旋锁(1)
摘要:任何互斥协议都会产生这样的问题:如果不能获得锁,应该怎么做?对此有两种选择。其一种方案是让其继续进行尝试,这种锁称为自旋锁,对锁的反复测试过程称为旋转或忙等待。在希望锁延迟较短的情形下,选择旋转的方式比较合乎情理。但只有在多处理器中旋转才有实际意义。TASLock[代码]TTASLock [代码] 从正确性的角度来看,TASLock和TTASLock算法是等价的:每一个算法都保证了无死锁的互斥。(... 阅读全文
posted @ 2009-10-19 23:00 汝熹 阅读(795) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示