信号量的共识号是多少?
-
13-09-2019 - |
题
解决方案
静音的共识编号为1。很明显,单个线程将无需等待。从其定义来看,也很明显,静音不再是两个线程的不再等待。因此,共识编号为> = 1和<2,因此必须为1。
同样,通过停止一个线程以另一个线程而使用的其他同步机制也有数字1,因此不能用于构造由2个线程共享的无等待对象。
其他提示
答案取决于静音或信号量的支持操作。如果仅支持锁定锁,共识号为1。如果线程可以尝试锁定静音而无需等待,则共识号为2。也就是说,因为如果有两个线程,两者都可以尝试锁定mutex,则两者都可以同意哪一个得到了,因此达成共识。如果Mutex可以进一步确定任何数量的线程(线程已锁定),则共识编号是无限的。我认为信号量的情况相似。静音等同于使用计数器1的信号量。我认为只能使用较大的计数器就可以达成共识,但它仍然归结为相同的操作。 Pthreads支持非阻滞锁,但不询问,因此答案将为2。
如果任何线程不等待,则信号变量无能为力,因此它们具有共识数量1。
仅凭这篇文章,您就可以得出结论,信号量必须具有小于或等于2的共识编号。这就是为什么:
他们在文章的第三页上说:“获取和添加操作非常灵活:它可用于信号量...”。由于我们知道获取&添加的共识编号等于2,因此可以使用该论文的定理1来证明信号量必须具有小于或等于2的共识数量。证明是这样的:
证明
假设通过获取和添加的存在信号量的候补实现。进一步假设信号量的共识编号大于2。我们知道Fetch&Add的共识数为2。从定理1中,我们可以得出结论,没有通过Fetch&添加2个以上过程的Semaphore的无等待实现。 。这与以下假设相矛盾:通过获取&添加实现。因此,信号量必须具有小于或等于2的共识数。
QED
不隶属于 StackOverflow