信号灯小书 - 屏障

Little Book of Semaphores - barrier

我正在阅读主题中提到的那本书,有一件事让我很烦恼。对于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()

还是我对计数器变量过于谨慎了?

感谢您的回答。

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

作者可能过度简化了他们的伪代码,实际上是这样的:

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

...这将是正确的。