信号灯小书 - 屏障
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 ()
...这将是正确的。
我正在阅读主题中提到的那本书,有一件事让我很烦恼。对于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 ()
...这将是正确的。