Linuxのスレッド間の同期と相互排他

      同時にスレッドを実行しながら、我々はデータの曖昧で、その結果、スレッドを防ぐために、リソースの競合を重要なリソースへの安全なアクセスを確保する必要があります。

      

      同期スレッド:可変条件

      なぜ利用条件変数?

      制御の重要なリソースのタイミングは、条件が重要なリソース、同様の信号の動作を待っている他のスレッドに通知します。シーン:T-DAYは、show /生産者-消費者モデルを見るために並んで

      どのような条件変数?

      同期機構は、他のスレッドは、変更が発生した受信信号状態を有する満たすためにダウン継続する他のスレッドのための条件を変更するように、スレッドは可変です。      

      条件変数を操作?

      初期化と破壊

        pthread_cond_waitの

      条件がされます満たされていない解放され、ロックを待ってブロックされ、この機能があるアトミック操作:スレッドに条件を待っているキュー     2つのリリースロックを                            

      条件は、スレッドの航跡をアップ会い、ロックされています

         pthread_cond_signalを1つのウェイク     

             キュー内で待機しているスレッドを覚まします

      pthread_cond_broadcastのブロードキャストウェイク

               キュー内で待機中のすべてのスレッドを覚まします       

      なぜ待ち時間とアトミック操作のロックを解除する必要が/なぜあなたは、ミューテックス、条件変数を使用しますか?

      なぜならためにpthread_cond_waitのロック、ミス信号を防止するために、可変条件を保護する場合、そのようなロックを解除するために、スレッドAおよびスレッドBにCPUタイムスライス切り替え、Bのスレッドロック状態変数信号と送信する。このようしない待機解除アトミックオペレーション、その後、スレッドAに切り替えると、逃した信号を待つする機会があったスレッド、それが永久的にブロックされたことがあります。そのため、待機とロック解除の操作がアトミックでなければなりません。

      なぜ我々は、重要なリソースがあるかどうかを判断するために、whileループが必要なのでしょうか?

      では、多くのスレッドは、重要なリソースを他のスレッドを実行しない場合の状況下では、生産者は、信号を送り、待機中のスレッドがウェイクアップし、ロックされた1つだけのスレッドがロックすることができ、他のスレッドは、ロックを待ってブロックされます裁判官は、それは無理がある、ダウンする続行します。

      singnal最初のアンロックやアンロック?

      ロックを解除することがあるロック解除後に無感、葛、取得した後、重要なリソースを使用するのを待ってブロックするどのスレッドでない場合はfalseウェイクは

      まず葛、Linuxでの競争のスレッドロックをできるように目覚め、2つのキュー、1 cond_wait、1にmutex_lockがあり、目を覚ます葛だけでユーザ空間に戻らないであろう、cond_waitのスレッドがにmutex_lockに転送してみましょう。これが改善効率。

      

      

      スレッド相互に排他的:ミューテックス

      なぜミューテックスを使うのか?

      以下のために同じ時間重要なリソースへのアクセスのみ、重要なリソースの保護は、変更を防止します。シーン:グラブ投票に牛

      何ミューテックスロックのですか?

      ある0/1カウンタそれがリソースを表すない0を操作することができ、リソースが動作可能で表します。

      ミューテックスの操作?

      初期化と破壊

      カウントは、1 ---ロック0に等しい場合、動作が必要な、カウントが0である場合、ブロック待機カウントが1になります

      Countが1つのロック解除に設定されています---

      

      

おすすめ

転載: www.cnblogs.com/Duikerdd/p/11761151.html