我浏览了主题中提到的那本书,有一件事让我感到困惑。对于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()
或者我对计数器变得过于谨慎?
感谢您的回答。
答案 0 :(得分:1)
是的,它应该受到保护,你的修复看起来是正确的。
作者可能过度简化了他们的伪代码,实际上意味着:
3 mutex.wait ()
4 count = count + 1
5 c = count
6 mutex.signal()
7
8 if c == n: barrier.signal ()
......这是正确的。