节俭通用构造算法与知识感知分块算法解析
1. TLC算法基础与正确性证明
TLC算法中,CAS的初始值为 -1,这意味着信息以序号 -1 和完成状态进行编码。所有进程最初会竞争序号为 0 的第 0 轮。若CAS中编码的序号为 k,则系统处于第 k 轮。
- 系统按轮次推进 :系统按轮次推进,每轮CAS中的序号增加 1。假设系统处于第 k 轮,即CAS中的序号为 k。必然存在一个进程 p 在第 30 行获取相应的序号轮次,并尝试在第 31 行将其值赋给 History[k]。这意味着准备阶段最终会完成,系统将转向帮助阶段。在帮助阶段,每个进程将调用写入 History[k],然后将系统更新为完成状态。因此,帮助阶段最终会完成,系统将进入下一轮,序号增加 1。
- TLC算法无锁 :由于系统总是在推进,所以TLC算法是无锁的。
- 每轮唯一调用 :对于每一轮 k,History[k] 只会被分配一个唯一的调用。因为系统按轮次推进,对于每一轮 k,History[k] 必须在第 24 行更新。但每个进程可能在第 30 行写入 History[k]。假设 History[k] 首次被分配值 v,在这之前,SubHistory[p][k] 必须已经被分配 v,并且在整个执行过程中仅在第 29 行分配一次。后续对 History[k] 的每次写入都是 SubHistory[p][k] 的副本,由于 SubHistory[k] 只被写入一次,所以该引理得证。
- 进程按相同顺序执行调用 :所有进程按照 History 数组中出现的顺序运行调用。
超级会员免费看
订阅专栏 解锁全文
1728

被折叠的 条评论
为什么被折叠?



