Управление многопоточным потоком с помощью условия _переменной

Я еще не окунулся в многопоточность С++ 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!, а затем зависаю в ожидании thread2cv.wait. Что не так?

Может быть, мне все равно не следует использовать переменную условия... вокруг waitнет никаких условий, и нет данных, которые нужно защищать с помощью мьютекса. Что мне делать вместо этого?

7
задан David 11 July 2012 в 23:16
поделиться