私はマルチスレッドプログラミングに触れていません。私は簡単なテストプログラムを持っている:ミューテックスのロックとロック解除の時間差
#include <mutex>
#include <thread>
#include <iostream>
int main(){
std::mutex mtx;
std::thread t1([&](){
while (true){
mtx.lock();
std::cout << 1 << "Hello" << "\n";
mtx.unlock();
}
});
std::thread t2([&](){
while (true){
mtx.lock();
std::cout << 2 << "Hello" << "\n";
mtx.unlock();
}
});
t1.join();
t2.join();
}
は、これは非常に単純なプログラムであり、それはミューテックスが1でロックを解除し、その後に買収されたことを意味し、ランダムなパターンで「1Hello」と「2Hello」を印刷します他のいくつかのランダムなパターンで実行されます。
標準で動作が指定されていますか?つまり、実装がt1に固執しないことを保証しますか?もしそうでなければ、どうすればそれを避けることができますか?
「t1」はミューテックスのロックを解除する必要はありません。ちょうどコードを読んでください!また、現代の*プリエンプティブ*マルチタスキングとそれがどのように機能するかを読む必要があるようです。 –
私は標準がそれを保証しているとは思わないが、実際には、両方とも実行される。 – MikeMB
私はちょうど得ることができないのであなたの質問(多分いくつかのプロンプトを追加する)を正確に明確にすることができます:( 質問はここで答えるために広いです+あなたがマルチスレッド\レース-condition \ dead-lock \ live-lockなどあなたはあなた自身の質問に答えてくれるでしょう(それはそこにありました:)) – LordTitiKaka