Mistake on this page?
Report an issue in GitHub or email us
Public Member Functions
ConditionVariable Class Reference

The ConditionVariable class is a synchronization primitive that allows threads to wait until a particular condition occurs. More...

#include <ConditionVariable.h>

Inheritance diagram for ConditionVariable:
NonCopyable< ConditionVariable >

Public Member Functions

 ConditionVariable (Mutex &mutex)
 Create and initialize a ConditionVariable object. More...
 
void wait ()
 Wait for a notification. More...
 
bool wait_until (uint64_t millisec)
 Wait for a notification until the specified time. More...
 
bool wait_for (uint32_t millisec)
 Wait for a notification or timeout. More...
 
void notify_one ()
 Notify one waiter on this condition variable that a condition changed. More...
 
void notify_all ()
 Notify all waiters on this condition variable that a condition changed. More...
 
 ~ConditionVariable ()
 ConditionVariable destructor. More...
 

Detailed Description

The ConditionVariable class is a synchronization primitive that allows threads to wait until a particular condition occurs.

Use the condition variable in conjunction with a mutex to safely wait for or notify waiters of condition changes to a resource accessible by multiple threads.

The thread that intends to wait on a ConditionVariable must:

The thread that intends to notify a ConditionVariable must:

All threads waiting on the condition variable wake when ConditionVariable::notify_all is called. At least one thread waiting on the condition variable wakes when ConditionVariable::notify_one is called.

While a thread is waiting for notification of a ConditionVariable, it releases the lock held on the mutex. The ConditionVariable reacquires the mutex lock before exiting the wait function.

Unspecified behavior

Undefined behavior

Note
Synchronization level: Thread safe

Example:

#include "mbed.h"
Mutex mutex;
// These variables are protected by locking the mutex.
uint32_t work_count = 0;
bool done = false;
void worker_thread()
{
// Acquire lock on mutex before accessing protected variables and waiting.
mutex.lock();
while (done == false) {
printf("Worker thread: Count: %lu\r\n", work_count);
// Wait for main thread to notify the condition variable.
printf("Worker thread: Waiting\r\n");
cv.wait();
}
printf("Worker: Exiting\r\n");
// The condition variable acquires the lock when exiting the `wait` function.
// Unlock mutex when exiting the thread.
mutex.unlock();
}
int main()
{
Thread thread;
thread.start(worker_thread);
for (int i = 0; i < 5; i++) {
// Acquire lock on mutex before modifying variables and notifying.
mutex.lock();
// Change count and notify waiters.
work_count++;
printf("Main thread: Set count to: %lu\r\n", work_count);
printf("Main thread: Notifying worker thread\r\n");
cv.notify_all();
// Mutex must be unlocked before the worker thread can acquire it.
mutex.unlock();
wait(1.0);
}
// Change done and notify waiters of this.
mutex.lock();
done = true;
cv.notify_all();
mutex.unlock();
thread.join();
printf("Main: Exiting\r\n");
}

Definition at line 152 of file ConditionVariable.h.

Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.