Я еще не окунулся в многопоточность С++ 11, но я пытаюсь, чтобы несколько потоков ждали некоторого события в основном потоке, а затем все сразу продолжали (обработку того, что произошло ), и wait
снова, когда они закончат обработку... зацикливаются до тех пор, пока не будут закрыты. Ниже не совсем то, что -это более простое воспроизведение моей задачи:
std::mutex mutex;
std::condition_variable cv;
std::thread thread1([&](){ std::unique_lock<std::mutex> lock(mutex); cv.wait(lock); std::cout << "GO1!\n"; });
std::thread thread2([&](){ std::unique_lock<std::mutex> lock(mutex); cv.wait(lock); std::cout << "GO2!\n"; });
cv.notify_all(); // Something happened - the threads can now process it
thread1.join();
thread2.join();
Это работает... если только я не остановлюсь на некоторых точках останова и не замедлим работу. Когда я это делаю, я вижу Go1!
, а затем зависаю в ожидании thread2
cv.wait
. Что не так?
Может быть, мне все равно не следует использовать переменную условия... вокруг wait
нет никаких условий, и нет данных, которые нужно защищать с помощью мьютекса. Что мне делать вместо этого?