C++ condition_variable::wait() Function



The std::condition_variable::wait() function in C++, is used to block the thread until a specified condition is met. It is used in conjunction with the std::mutex and a std::unique_lock, ensuring the thread-safe execution. When the condition becomes true, the function reacquires the lock and resumes the execution.

Syntax

Following is the syntax for std::condition_variable::wait() function.

 void notify_all() noexcept;void wait (unique_lock<mutex>& lck); or void wait (unique_lock<mutex>& lck, Predicate pred); 

Parameters

  • lck − It indicates a unique_lock object whose mutex object is currently locked by this thread.
  • pred − It indicates a callable object or function that takes no arguments and returns a value that can be evaluated as a bool.

Return value

This function does not return anything.

Example 1

Let's look at the following example, where we are going to coordinates two threads.

 #include <iostream> #include <thread> #include <condition_variable> #include <mutex> std::mutex a; std::condition_variable b; bool turn = false; void x1() { std::unique_lock < std::mutex > lock(a); std::cout << "x1 waiting for its turn....\n"; b.wait(lock, [] { return turn; }); std::cout << "x1 proceeding...\n"; } void x2() { std::this_thread::sleep_for(std::chrono::seconds(1)); { std::lock_guard < std::mutex > lock(a); turn = true; std::cout << "x2 signals Thread 1's turn.\n"; } b.notify_one(); } int main() { std::thread a1(x1); std::thread a2(x2); a1.join(); a2.join(); return 0; } 

Output

Output of the above code is as follows −

 x1 waiting for its turn.... x2 signals Thread 1's turn. x1 proceeding... 
cpp_condition_variable.htm
Advertisements