我希望等待使用條件變量。多等待使用通知全部
我已經創建了一個包含10個線程的程序,每個線程都在主線程中等待信號notify_all()
。但它陷入僵局,我不想理解爲什麼。
#include <iostream> // std::cout
#include <thread> // std::thread
#include <mutex> // std::mutex, std::unique_lock
#include <condition_variable> // std::condition_variable
#include <chrono>
using namespace std;
std::mutex mtx;
std::condition_variable cv;
int xx = 0;
void print_id (int id) {
std::unique_lock<std::mutex> lck(mtx);
cout<<"Start thread id " << id << " \n";
for(int i=0; i<9; i++)
{
cout<<"Thread " << id << " i " << i <<"\n";
cv.wait(lck);
}
}
void go()
{
cv.notify_all();
for(int i=0; i<10; i++)
{
//Some works for threads
cv.notify_all();
}
}
int main()
{
std::thread threads[10];
for (int i=0; i<10; ++i)
threads[i] = std::thread(print_id,i);
std::cout << "10 threads ready to race...\n";
go(); // go!
for (auto& th : threads) th.join();
}
除非您有什麼需要等待的地方,否則不能調用wait。你不能調用'notify_all',除非你有通知的線程。而且,最糟糕的是,你的互斥鎖並不能保護任何東西!它應該是保護你正在等待的東西以及你正在通知的東西! –