2016-07-14 3 views
0

デッドロックのあるコードがあります。私はそれを解決する方法のいくつかの解決策について考え、それらの一つがアトミックに次の操作を行うことだった。私はcouldn以来、私は、pthreadではアトミックこれを実行することが可能であるかどうかわからないんだけどしかし条件がpthreadsで原子的に真である場合、cond_waitを実行できますか?

if(!ready) 
    pthread_cond_wait(&(cond[0]), &(lock[0])); 

ドキュメントの中に何かを見つけることはできません。おそらくそれを行う方法のトリックがあるかもしれません。私はコードの残りの部分については説明しません。なぜなら、この質問に答えることは関係ないと思うからです。

ありがとうございました。

答えて

0

mutex lock[0]が保持されているため、readyの変更に関しては原子的であり、他のスレッドではreadyのすべての変更を保持する必要があります。

whileではなくifを使用する必要があります。条件が変更されていなくても、待ち時間が早く起きる可能性があるためです。

+0

これは本当ですが、ready変数を設定するためにlock [0]を取得しようとしている他のスレッドを避けたいのです。このスレッドがロックを解除するまで待ちます待つ。 – fc67

+0

テストの直前にロックする必要があります。 – caf

関連する問題