#include <system-condition.h>
Public Member Functions | |
void | SetCondition (bool condition) |
bool | GetCondition (void) |
void | Signal (void) |
void | Broadcast (void) |
void | Wait (void) |
bool | TimedWait (uint64_t ns) |
It is often desirable to have a mechanism by which a thread can suspend its execution and relinquish the process until some condition to becomes true. We provide platform-independent access to this OS-dependent capability with the SystemCondition class.
There are two ways to tell the underlying primitive that the condition has become true: Signal and Broadcast. Signal will only wake up one thread waiting on the condition (according to the OS scheduling policy); Broadcast will wake up all of the threads waiting on the condition (cf. "The Thundering Herd").
In order to wait for the underlying condition, you also have two alternatives: Wait and TimedWait. The Wait call will wait forever for the condition to become true; but the TimedWait has a timeout.
The condition underlying this class is a simple boolean variable. It is set to false in each call to Wait and TimedWait. It is set to true in each call to Signal and Broadcast. This is a fairly simple-minded condition designed for
A typical use case will be to call Wait() or TimedWait() in one thread context and put the processor to sleep until an event happens somewhere else that
void ns3::SystemCondition::Broadcast | ( | void | ) |
Release all threads waiting for the condition to be true. If you want all waiting threads to return, you should have done a SetCondition (true) prior to calling.
bool ns3::SystemCondition::GetCondition | ( | void | ) |
Get the value of the underlying condition.
void ns3::SystemCondition::SetCondition | ( | bool | condition | ) |
Set the value of the underlying condition.
void ns3::SystemCondition::Signal | ( | void | ) |
Release one thread if waiting for the condition to be true. If you want a waiting thread to return, you should have done a SetCondition (true) prior to calling.
bool ns3::SystemCondition::TimedWait | ( | uint64_t | ns | ) |
Wait a maximum of ns nanoseconds for the condition to be true. If the wait times out, return true else return false.
void ns3::SystemCondition::Wait | ( | void | ) |
Wait, possibly forever, for the condition to be true.