Я попытался реализовать condition_variable
с двумя потоками, следующий код будет работать хорошо, если я не буду использовать пользовательский ввод (std::cin
), но как только я его использовал, программа разбилась после ввода числа на экране.C++ condition_variable cin и cout
Почему он падает?
std::mutex mu;
std::condition_variable cond;
int x =0;
void th_in()
{
std::unique_lock <mutex> locker(mu);
std::cin>>x;
locker.unlock();
cond.notify_all();
}
void th_out()
{
std::unique_lock <mutex> locker(mu);
cond.wait(locker);
std::cout<<x<<std::endl;
locker.unlock();
}
int main()
{
std::thread t2(th_out);
std::thread t1(th_in);
std::cin.get();
return 0;
}
Боковая информация: 'std :: condition_variable' может вызвать« ложную пробушку », поэтому' cond.wait (locker); 'будет разблокирован, когда' th_in' не вызывает 'cond.notify_all();'. См. Также [std :: condition_variable] (http://en.cppreference.com/w/cpp/thread/condition_variable). – yohjp