Art of Multiprocessor Programming 答案 ch14
2014-05-24 21:14
169 查看
163.
每个节点有相同的高度,并且是一次失败的查找。
164.
N * pow(p, n)
165.
166.
key可以不唯一,item唯一,因为add/remove/find都是以x(item)为参数。
所以find方法改为找到该节点 或者 找到该key值的末尾。
add方法也不用改变,因为add是从0层开始链入;如果2个add试图以同一个节点为尾节点加入新节点,则肯定有一个add会抢锁失败然后valid失败;如果以不同的节点为尾节点,表示某一个尾节点的next已经被改变,valid也会失败。如果一个节点链入了0层,则另一个的find会失败。
167.
这个方法不成功的可线性化点在 find返回 false。
这仍然是一个无锁算法。根据无锁的定义:it guarantees that infinitely often some method call finishes in a finite number of steps. 即无数次的方法调用中总有在有限步内完成的。如果无数次的方法调用都没有能够返回的调用,对应的case是 find总能找到并行add的可删除节点,但是总是标记失败且发现被删除节点已经被标记。即失败的调用者总是对应一个成功的将被删除节点标记并返回的调用。符合lockless的调用。
168.
这只是一种临时状态。
169.
求例子 。
170.
Add: 如图所示,find(x)将会得到succ = null;
Remove: 如图所示,如果这时候调用contain,将得到错误的结果;或者任何值 > 2的update操作,都会在find的时候在
retry --> sip = pred.next[level].compareAndSet(curr, succ, false, false) 死循环,因为2.layer1.marked = true。
171.
172.
每个节点有相同的高度,并且是一次失败的查找。
164.
N * pow(p, n)
165.
166.
key可以不唯一,item唯一,因为add/remove/find都是以x(item)为参数。
所以find方法改为找到该节点 或者 找到该key值的末尾。
add方法也不用改变,因为add是从0层开始链入;如果2个add试图以同一个节点为尾节点加入新节点,则肯定有一个add会抢锁失败然后valid失败;如果以不同的节点为尾节点,表示某一个尾节点的next已经被改变,valid也会失败。如果一个节点链入了0层,则另一个的find会失败。
167.
这个方法不成功的可线性化点在 find返回 false。
这仍然是一个无锁算法。根据无锁的定义:it guarantees that infinitely often some method call finishes in a finite number of steps. 即无数次的方法调用中总有在有限步内完成的。如果无数次的方法调用都没有能够返回的调用,对应的case是 find总能找到并行add的可删除节点,但是总是标记失败且发现被删除节点已经被标记。即失败的调用者总是对应一个成功的将被删除节点标记并返回的调用。符合lockless的调用。
168.
这只是一种临时状态。
169.
求例子 。
170.
Add: 如图所示,find(x)将会得到succ = null;
Remove: 如图所示,如果这时候调用contain,将得到错误的结果;或者任何值 > 2的update操作,都会在find的时候在
retry --> sip = pred.next[level].compareAndSet(curr, succ, false, false) 死循环,因为2.layer1.marked = true。
171.
172.
相关文章推荐
- Art of Multiprocessor Programming 答案 ch17
- Art of Multiprocessor Programming 答案 ch15
- C++Primer第五版 第八章习题答案(11~14)
- [Code Complete]Part4:Stament(CH14,15,16,17,18,19)
- Linux Command Line and....ch14(处理用户输入)
- 《Hadoop The Definitive Guide》ch14 Case Studies
- python核心编程第六章练习题答案 (2,3,5,6,7,8,12,13,14,16)
- 《C++ Primer Plus(第六版)》(14)(第九章 内存模型和命名空间 复习题答案)
- 《Code Complete》ch.14 组织直线型的代码
- 算法导论(CLRS, 2nd) 个人答案 Ch12.1
- JAVA编程思想第四版-多线程的练习答案之练习14
- 2010年上半年5月份系统分析师上午试题答案(分析与解答)之四(第3次修订 修订时间:2010年6月1日14:41)
- Java编程思想 ch14 类型信息
- 解决:Ubuntu14 下ibus输入法 异常 输入i出来ch
- 算法导论(CLRS, 2nd) 个人答案 Ch2.2
- Art of Multiprocessor Programming 答案 ch8 p95
- Art of Multiprocessor Programming 答案 ch13
- CH14,P272,练习一,编码转化类---不大会应用
- TCP/IP 详解 卷1 ch14 DNS: The Domain Name System
- Think in java 答案_Chapter 4_Exercise 14