信号量小书 - 障碍

时间:2017-04-13 23:45:00

标签: multithreading semaphore

我浏览了主题中提到的那本书,有一件事让我感到困惑。对于Barrier,解决方案是以下(伪)代码:

1 rendezvous
2
3 mutex.wait ()
4     count = count + 1
5 mutex.signal()
6
7 if count == n: barrier.signal ()
8
9  barrier.wait()
10 barrier.signal()
11
12 critical point

但是,计数器的读数不应该也是互斥保护的,所以读取时没有不一致吗?我的意思是:

3 mutex.wait ()
4     count = count + 1
5     if count == n: barrier.signal()
6 mutex.signal()

或者我对计数器变得过于谨慎?

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

是的,它应该受到保护,你的修复看起来是正确的。

作者可能过度简化了他们的伪代码,实际上意味着:

3 mutex.wait ()
4     count = count + 1
5     c = count
6 mutex.signal()
7 
8 if c == n: barrier.signal ()

......这是正确的。