3.6 Barrier
Barrier 详解
Barrier的意思是 障碍、用栅栏围住
看这部分内容需要考虑3.5节Multiplex的内容,作者想讲述的是当等待的线程个数为n的时候,再开始执行每一个等待的线程。
如下设计会产生死锁:
原因:
假如有5个thread,这时有4个thread已经到来了,即count为4,barrier中的信号为-4,这时又一个thread到来,count为5,所以barrier中的信号为-4+1 = -3,但是不能继续去执行,因为信号时-3,所以会死锁。
改成如下,就能解决死锁的问题:
图片摘自Little book of semaphores。