A class which provides a relatively platform-independent conditional-wait thread synchronization primitive. More...
#include "system-condition.h"
Public Member Functions | |
SystemCondition () | |
~SystemCondition () | |
void | Broadcast (void) |
Release all threads waiting for the condition to be true. More... | |
bool | GetCondition (void) |
Get the value of the underlying condition. More... | |
void | SetCondition (bool condition) |
Set the value of the underlying condition. More... | |
void | Signal (void) |
Release one thread if waiting for the condition to be true. More... | |
bool | TimedWait (uint64_t ns) |
Wait a maximum of ns nanoseconds for the condition to be true. More... | |
void | Wait (void) |
Wait, possibly forever, for the condition to be true. More... | |
Private Attributes | |
SystemConditionPrivate * | m_priv |
The (system-dependent) implementation. More... | |
A class which provides a relatively platform-independent conditional-wait thread synchronization primitive.
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
Definition at line 70 of file system-condition.h.
ns3::SystemCondition::SystemCondition | ( | ) |
Definition at line 209 of file unix-system-condition.cc.
References NS_LOG_FUNCTION.
ns3::SystemCondition::~SystemCondition | ( | ) |
Definition at line 215 of file unix-system-condition.cc.
References m_priv, and NS_LOG_FUNCTION.
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.
Definition at line 243 of file unix-system-condition.cc.
References ns3::SystemConditionPrivate::Broadcast(), m_priv, and NS_LOG_FUNCTION.
bool ns3::SystemCondition::GetCondition | ( | void | ) |
Get the value of the underlying condition.
Definition at line 229 of file unix-system-condition.cc.
References ns3::SystemConditionPrivate::GetCondition(), m_priv, and NS_LOG_FUNCTION.
Referenced by ns3::WallClockSynchronizer::SpinWait().
void ns3::SystemCondition::SetCondition | ( | bool | condition | ) |
Set the value of the underlying condition.
[in] | condition | value |
Definition at line 222 of file unix-system-condition.cc.
References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::SetCondition().
Referenced by ns3::WallClockSynchronizer::DoSetCondition(), and ns3::WallClockSynchronizer::DoSignal().
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.
Definition at line 236 of file unix-system-condition.cc.
References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::Signal().
Referenced by ns3::WallClockSynchronizer::DoSignal().
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.
[in] | ns | maximum of nanoseconds to wait |
true
if the timer expired, otherwise return false
. Definition at line 257 of file unix-system-condition.cc.
References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::TimedWait().
Referenced by ns3::WallClockSynchronizer::SleepWait().
void ns3::SystemCondition::Wait | ( | void | ) |
Wait, possibly forever, for the condition to be true.
Definition at line 250 of file unix-system-condition.cc.
References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::Wait().
|
private |
The (system-dependent) implementation.
Definition at line 117 of file system-condition.h.
Referenced by ~SystemCondition(), Broadcast(), GetCondition(), SetCondition(), Signal(), TimedWait(), and Wait().