From: https://en.cppreference.com/w/cpp/thread/condition_variable/wait
void waits()
{
std::unique_lock<std::mutex> lk(cv_m);
std::cerr << "Waiting... \n";
cv.wait(lk, []{return i == 1;});
std::cerr << "...finished waiting. i == 1\n";
}
Second argument is a predicate:
template< class Predicate >
void wait( std::unique_lock<std::mutex>& lock, Predicate pred );
What is that []
with doing there? How is writing that condition i == 1
inside wait
different from this:
if (i == 1)
{
std::unique_lock<std::mutex> lk( mutex_association );
// Do something with `i`
}
else
{
std::unique_lock<std::mutex> lk( mutex_association );
cv_association.wait( lk );
}