pthread_mutex_lock()
への呼び出しで複数のスレッドがブロックされているとします。 mutexが利用可能になると、pthread_mutex_lock()
を呼び出した最初のスレッドはロックを取得しますか?つまり、pthread_mutex_lock()
への呼び出しはFIFO順ですか?もしそうでなければ、もしあれば、それは何ですか?ありがとう!複数のスレッドが待機している `pthread_mutex_lock()`ウェイクオーダーとは何ですか?
答えて
mutexが使用可能になると、
pthread_mutex_lock()
という最初のスレッドはロックを取得しますか?
いいえ待機中のスレッドの1つがロックを取得しますが、それを取得するスレッドは決まっていません。
FIFO順序?
FIFOミューテックスはむしろ既にパターンです。 Implementing a FIFO mutex in pthreads
FIFOの順序付けは、可能な限り最も効率的なミューテックスウェイクオーダーです。本当にひどい実装だけがそれを使用します。直前に実行されたスレッドは、コンテキストスイッチなしで再び実行できる可能性があり、最近スレッドが実行されたときに、そのデータとコードの多くがキャッシュ内で暑くなります。合理的な実装では、最後にそれを保持していたスレッドにmutexを渡そうとします。
- ミューテックスを取得:
はこれを行う2つのスレッドが考えてみましょう。
- いくつかのデータを調整します。
- ミューテックスを解放します。
- 今シングルコアCPU上でこのコードを実行する2つのスレッドを想像1.
に進みます。 FIFOミューテックスの動作によって、コンテキストスイッチごとに1つの「データを調整する」ことが可能であることは明らかです。これは最悪の結果です。
もちろん、合理的な実装では、一般的に公平になることはできません。 1つのスレッドが先進的な進展をしないようにしたい。しかし、それはFIFO実装を正当化することはほとんどありません!
"合理的"というあなたのアイデアはほとんどのものと互換性がありません。特に、リアルタイム要件には対応していません。ミューテックスを迅速にロックしロック解除する単一のスレッドは、他のスレッドでの進捗を妨げます。各優先順位レベル内のFIFO順序は、強固なリアルタイム使用のためにmutexが動作する通常の方法です。 –
@R .. POSIXミューテックスは、リアルタイムではなく、意図されていません。彼らは明らかに不公正ではなく、プロセス全体の進歩を最大限にすることを意図しています。 –
pthread_mutex_unlock()関数は、mutexが参照するmutexオブジェクトを解放します。mutexが解放される方法は、mutexのtype属性に依存します。 )が呼び出され、その結果ミューテックスが利用可能になる。**スケジューリング方針はどのスレッドがミューテックス**を獲得するかを決定する。 (emphasis mine) –
"pthread_mutex_unlock()が呼び出されたときにmutexによって参照されるmutexオブジェクトにブロックされたスレッドがあり、その結果mutexが使用可能になる場合、スケジューリングポリシーはどのスレッドがmutexを取得するかを決定します。
あなたの質問に対する答えは、POSIX標準では指定されていません。実装によって行われた選択に応じて、ランダムであってもFIFOまたはLIFOまたはその他の順序であってもかまいません。
- 1. 1つのイベントで複数のスレッドが待機していますか?
- 2. Java - スレッドが待機しているときを知る方法?
- 3. Pスレッドと待機条件
- 4. スレッドはロックFIFOで待機していますか?
- 5. C++ 11スレッド:条件変数を待っている複数のスレッド
- 6. スレッドは、すべてのスレッドがjavaを使用して出力を返すまで待機しますか?
- 7. カフカプロデューサー0.9.0パフォーマンス、多数の待機スレッド
- 8. 複数のスレッドがグローバル変数を定期的に更新します。3番目のスレッドが読み込みを待機しています。
- 9. デーモンではないスレッドがロックで無期限に待機しているときのPythonのsys.exitの動作
- 10. Androidスレッド待機中
- 11. ビジー待機スレッドwith
- 12. 私がスレッドに複数のタイマーを追加しようとしているスレッド
- 13. ManualResetEventのサイズは、複数のスレッドを待機するのに十分なチェックですか?
- 14. ストアドプロシージャ内に複数のストアドプロシージャがあり、待機しています
- 15. Javaのビジー待機スレッド
- 16. OutOfMemoryError - 待機中のスレッドがガベージコレクトされないのはなぜですか?
- 17. スレッドのアンドロイド待機アクティビティ
- 18. スレッドをブロックしないで待機しますか? - どうやって?
- 19. 複数のスレッドが同じオブジェクト上で同期を待っているときのイベントの順序
- 20. iPhone - 待ち状態のスレッドのスレッドを解除していないスレッド状態信号
- 21. ブロードキャストの前にスレッドが作成され待機していることを確認してください
- 22. 複数のスレッドがPostfixサーバに接続していますか?
- 23. スレッドC++で待機中の述語関数での問題
- 24. タイプTのパラメータが期待される関数では、()は何を引数として意味しますか?
- 25. メソッドは、いくつかのスレッドを待っていると通知します
- 26. スレッドがプロセスと共有していないことは何ですか?
- 27. C#で複数の継承機能が必要です。私は間違って何をしていますか?
- 28. これはスレッド待機/パルシングの有効な実装ですか?
- 29. pthread_cond_signalが待機中のスレッドを起動させることは保証されていますか?
- 30. jqueryが複数の完全なイベントを待機する
FIFOによって、私は 'pthread_mutex_lock'を最初に呼び出すことができました。利用可能なときに最初にロックを取得し、後続のスレッドに対してロックを取得するようにしました。私は自分自身を実装していると思います。ありがとうございました。 – shanet
@shanet:* "私は、' pthread_mutex_lock 'を利用可能にしたときに最初にロックを取得する最初のスレッドを意味しています" * - はい、これはまさにFIFOミューテックスについてです。 – LihO