2017-04-13 7 views
0

私はトピックで言及された本を通過しています、そして1つはバグです。バリアのために、解決策は、以下の(擬似)コードです:セマフォーのリトルブック - バリア

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

うん、それは保護されるべきで、あなたの修正が正しいように見える。

これは、著者が自分の擬似コードを単純化しすぎて、実際にこの意味可能です:正しいだろう

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

を...。

関連する問題