タグ付けされた質問 「condition-variable」

10
pthreadの条件変数関数にミューテックスが必要なのはなぜですか?
私は読んでいpthread.hます。条件変数に関連する関数(などpthread_cond_wait(3))には、引数としてミューテックスが必要です。どうして?私が知る限りでは、その引数として使用するためだけにミューテックスを作成しますか?そのミューテックスは何をすることになっているのですか?

6
condition_variable.notify_one()を呼び出す前にロックを取得する必要がありますか?
の使用について少し混乱していますstd::condition_variable。を呼び出す前unique_lockに、を作成する必要があることを理解しています。私は何を見つけることができない、私はまた、呼び出す前に独自のロックを取得する必要があるかどうかですか。mutexcondition_variable.wait()notify_one()notify_all() cppreference.comの例は矛盾しています。たとえば、notify_oneページは次の例を示しています。 #include <iostream> #include <condition_variable> #include <thread> #include <chrono> std::condition_variable cv; std::mutex cv_m; int i = 0; bool done = false; void waits() { std::unique_lock<std::mutex> lk(cv_m); std::cout << "Waiting... \n"; cv.wait(lk, []{return i == 1;}); std::cout << "...finished waiting. i == 1\n"; done = true; } void signals() { …

3
ミューテックスをロックせずにpthread_cond_signalを呼び出す
pthread_cond_signalを呼び出す前にミューテックスをロックし、呼び出した後にミューテキストのロックを解除する必要があることをどこかで読みました。 pthread_cond_signal()ルーチンは、条件変数を待機している別のスレッドに信号を送る(またはウェイクアップする)ために使用されます。ミューテックスがロックされた後に呼び出す必要があり、pthread_cond_wait()ルーチンを完了するためにミューテックスのロックを解除する必要があります。 私の質問は、ミューテックスをロックせずにpthread_cond_signalまたはpthread_cond_broadcastメソッドを呼び出しても大丈夫ではないかということです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.