信号量的共识数是多少?

Gio*_*hal 13 synchronization mutex semaphore pthreads condition-variable

(我认为)互斥锁的共识数是2.

信号量的共识数是多少(如pthread_sem_*)?

条件变量的共识数是多少(如pthread_cond_*)?

MSa*_*ers 10

互斥锁的共识编号为1.很明显,互斥锁对于单个线程是等待的.从它的定义来看,同样清楚的是,两个线程的互斥锁不再是等待的.因此,共识数> = 1且<2,因此它必须为1.

同样,通过暂停一个线程而支持另一个线程而工作的其他同步机制也具有共识编号1,因此不能用于构造由2个线程共享的无等待对象.


Juh*_*man 5

答案取决于互斥锁或信号量上支持的操作.如果仅支持阻塞锁,则共识数为1.如果线程可以尝试在不等待的情况下锁定互斥锁,则共识数为2.这是因为如果有两个线程,则两者都可以尝试锁定互斥锁,两者都可以同意哪一个得到它,所以有共识.如果互斥锁可以另外确定,对于任何数量的线程,哪个线程已将其锁定,则共识数是无限的.我认为信号量的情况类似.互斥量相当于计数器1的信号量.我认为只有大型计数器才能达成共识,它仍然归结为相同的操作.Pthreads支持非阻塞锁但不支持查询,所以答案是2.

如果任何线程没有等待它,那么发信号通知条件变量什么也不做,因此它们具有共识编号1.