linux - ミューテックスロックと条件変数を理解するにはどうすればよいですか?
仅有的幸福
仅有的幸福 2017-06-12 09:24:46
0
1
1233

次のコードは「Unix/Linux プログラミング実践チュートリアル」からのものです。その機能は、2 つのスレッドを使用して 2 つのファイルの単語数をそれぞれカウントし、メイン スレッドで合計数を計算することです。以下は実行中のスクリーンショットです:

しかし、長い間読んだ後でも、次のコードのロック、ロック解除、および条件変数を理解するのは困難です。
聞きたいこと:

  1. pthread_cond_wait がメイン スレッドで呼び出されると、ミューテックス ロックが解放され、メイン スレッドは一時停止され、条件変数が変更されるのを待ちます。 ##pthread_cond_signal 、ミューテックスがロックされている場合、メインスレッドの pthread_cond_wait はミューテックスがロック解除されるのを待ってから、戻る前にミューテックスをロックしますか?

  2. 1 のとおりであれば、

    pthread_cond_waitpthread_cond_signal からシグナルを受信しましたが、ミューテックスがロックされる前に他のスレッドによってスナッチされました。ミューテックスはロックされていますが、pthread_cond_wait はミューテックスのロックが解除されるまでまだ待たなければならないという意味ではないでしょうか?

  3. 可能であれば、このプログラムの実行プロセスを明確にするのに役立つことを願っています。

  4. ###どうもありがとう。
リーリー
仅有的幸福
仅有的幸福

全員に返信(1)
扔个三星炸死你

複雑なことは何もありません。メインスレッドはロックを取得した後、スリープ状態になり、起動する信号を待ちます。

pthread_cond_signalこれが信号です

この種類のロックは他のロックとは少し異なります。スレッドはロックを申請し、ロックを取得できない場合はスリープ状態になって待機します。

この種のロックは、ロックされているときはスリープ状態になり、他のスレッドが起動するのを待ちます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート