A Discrete-Event Network Simulator
API
ns3::SystemCondition Class Reference

A class which provides a relatively platform-independent conditional-wait thread synchronization primitive. More...

#include "system-condition.h"

+ Collaboration diagram for ns3::SystemCondition:

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

SystemConditionPrivatem_priv
 The (system-dependent) implementation. More...
 

Detailed Description

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.

Constructor & Destructor Documentation

ns3::SystemCondition::SystemCondition ( )

Definition at line 207 of file unix-system-condition.cc.

References NS_LOG_FUNCTION.

ns3::SystemCondition::~SystemCondition ( )

Definition at line 213 of file unix-system-condition.cc.

References m_priv, and NS_LOG_FUNCTION.

Member Function Documentation

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 241 of file unix-system-condition.cc.

References ns3::SystemConditionPrivate::Broadcast(), m_priv, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

bool ns3::SystemCondition::GetCondition ( void  )

Get the value of the underlying condition.

Definition at line 227 of file unix-system-condition.cc.

References ns3::SystemConditionPrivate::GetCondition(), m_priv, and NS_LOG_FUNCTION.

Referenced by ns3::WallClockSynchronizer::SpinWait().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::SystemCondition::SetCondition ( bool  condition)

Set the value of the underlying condition.

Parameters
[in]conditionvalue

Definition at line 220 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().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 234 of file unix-system-condition.cc.

References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::Signal().

Referenced by ns3::WallClockSynchronizer::DoSignal().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

Parameters
[in]nsmaximum of nanoseconds to wait
Returns
true if the timer expired, otherwise return false.

Definition at line 255 of file unix-system-condition.cc.

References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::TimedWait().

Referenced by ns3::WallClockSynchronizer::SleepWait().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::SystemCondition::Wait ( void  )

Wait, possibly forever, for the condition to be true.

Definition at line 248 of file unix-system-condition.cc.

References m_priv, NS_LOG_FUNCTION, and ns3::SystemConditionPrivate::Wait().

+ Here is the call graph for this function:

Member Data Documentation

SystemConditionPrivate* ns3::SystemCondition::m_priv
private

The (system-dependent) implementation.

Definition at line 117 of file system-condition.h.

Referenced by Broadcast(), GetCondition(), SetCondition(), Signal(), TimedWait(), Wait(), and ~SystemCondition().


The documentation for this class was generated from the following files: