匿名无等待弱集的实现与分析
1. 弱集操作基础
在弱集操作中, Get() 操作可能因无限的 Add() 操作而无法终止。为解决这一问题,在执行 Add(v) 操作时,进程会先执行 Get() 操作,然后将值 v 与 Get() 的结果写入寄存器。
当执行 Get() 操作时,其结束条件有两个:
- 若所有寄存器中的值相同。
- 若能采用寄存器中某个“足够新”的获取值。判断新鲜值使用时间戳机制,通过 GetTS() 操作返回一个整数,若两次 GetTS() 操作非并发执行,先执行的操作返回的值小于后执行的操作返回的值。
2. Add(v) 操作流程
- 进程执行
GetTS()获取时间戳t。 - 执行
Get()操作并更新View,View由三元组<v, t, Get()结果>组成。 - 进程通过快照操作反复读取所有寄存器,更新
View,并将View循环写入所有寄存器,直到在所有寄存器中找到该三元组。当第 5 行或第
超级会员免费看
订阅专栏 解锁全文
171万+

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



