次のコードは「Unix/Linux プログラミング実践チュートリアル」からのものです。その機能は、2 つのスレッドを使用して 2 つのファイルの単語数をそれぞれカウントし、メイン スレッドで合計数を計算することです。以下は実行中のスクリーンショットです:
しかし、長い間読んだ後でも、次のコードのロック、ロック解除、および条件変数を理解するのは困難です。
聞きたいこと:
pthread_cond_wait
がメイン スレッドで呼び出されると、ミューテックス ロックが解放され、メイン スレッドは一時停止され、条件変数が変更されるのを待ちます。 ##pthread_cond_signal 、ミューテックスがロックされている場合、メインスレッドの
pthread_cond_wait はミューテックスがロック解除されるのを待ってから、戻る前にミューテックスをロックしますか?
pthread_cond_wait は
pthread_cond_signal からシグナルを受信しましたが、ミューテックスがロックされる前に他のスレッドによってスナッチされました。ミューテックスはロックされていますが、
pthread_cond_wait はミューテックスのロックが解除されるまでまだ待たなければならないという意味ではないでしょうか?
複雑なことは何もありません。メインスレッドはロックを取得した後、スリープ状態になり、起動する信号を待ちます。
pthread_cond_signal
これが信号ですこの種類のロックは他のロックとは少し異なります。スレッドはロックを申請し、ロックを取得できない場合はスリープ状態になって待機します。
この種のロックは、ロックされているときはスリープ状態になり、他のスレッドが起動するのを待ちます。