mutexロックは、呼び出された順にスレッドに与えられますか? 3つのスレッドA、B、Cとmutex mtxがあるとします。 Aがmtx.lock()を最初に呼び出し、次にBとCを呼び出すと、Aが最初にロックを取得し、次にBとCが続くことを意味します。そうでない場合、どうすれば保証できますか?mutexロックの順序
答えて
mutexで複数のスレッドが待機している場合は、待機中のスレッドが選択されます。先入れ先出し(FIFO)注文を想定しないでください。カーネルモードのAPCなどの外部イベントは、待機順を変更する可能性があります。 - MSDNから、Mutexオブジェクトについてのページ。
リンクを参照してください: Mutex Objects
この場合、注文を保証するために何が使用できますか? – Rishi
このリンクは、プラットフォーム固有のmutex APIに関するものと思われます。しかし、Askerが標準のC++以外のもの(すなわち、 'std :: mutex')を使用しているという表示はありません。 –
現在の所有者がmutexのロックを解除したときに、どのスレッドがmutexの所有権を受け取るかは不定です(私はstd :: mutexを意味します) –
を私はロックを取得3つのタスク、印刷何かを作成し、参加されるのを待って終了し、これを実証するために簡単な例を持っています。バリア(3)を設定する代わりに、これを(2)に設定してtask_aを実行させ、他の2つがロックを争うようにすることができます。
私はboost :: barrierを使用して、作成されるとすぐに起動しないようにします。結果はFIFOではなく、非確定的な順序です。プラットフォームが異なると、異なる結果が得られます。 A demo of it in action
std::mutex foo;
boost::barrier bar(3);
void task_a() {
bar.wait();
foo.lock();
std::cout << "task a\n";
foo.unlock();
}
void task_b() {
bar.wait();
foo.lock();
std::cout << "task b\n";
foo.unlock();
}
void task_c() {
bar.wait();
foo.lock();
std::cout << "task c\n";
foo.unlock();
}
int main()
{
std::thread th1 (task_a);
std::thread th2 (task_b);
std::thread th3 (task_c);
th1.join();
th2.join();
th3.join();
return 0;
}
- 1. Innodb Updateプライマリキーとセカンダリインデックスのロックの順序
- 2. (mutex)コールバック関数のロックC++
- 3. セグメンテーションフォルト - pthread mutexロック問題
- 4. std :: mutexロック関数とstd :: lock_guardの相違点<std::mutex>?
- 5. 原子インデックスを持つmutex配列からmutexをロックする
- 6. mutexとディスクのアクセスをロックする
- 7. Javaの階層的なmutexロック
- 8. devForceのエンティティの順序順序
- 9. ConstraintLayout描画順序/レイヤー順序
- 10. 順序
- 11. 順序
- 12. 何より良いstd :: lock_guard <std::mutex>ロック(std :: mutex mutex_var);またはstd :: mutex mutex_var.lock();
- 13. 塩析 - 手順の順序
- 14. DataTableの順序
- 15. どの順序
- 16. jQueryの:順序
- 17. イベントリスナーの順序
- 18. 行の順序
- 19. 行の順序
- 20. メッセージの順序
- 21. リストの順序
- 22. アセンブリロードの順序
- 23. コンストラクタコンポーネントコールの順序
- 24. Pythonリストの順序
- 25. socket.ioのメッセージ順序
- 26. NICのバインド順序
- 27. PubSubのメッセージ順序
- 28. Antlr4 - 句の順序
- 29. F#コマンドラインファイルの順序?
- 30. の実行順序
これは本物の質問です。 [mcve]はそれを_good_質問に変換します。 (注:私は、OPはスレッドAがスレッドBとCのロック順であることを確かに知っていると思います) – YSC
"A"は最初にロックを取得しますが、 B "と" C " – AhmadWabbi
は、BとCの順序を強制する方法はありますか? – Rishi