PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PCondMutex Class Referenceabstract

This class defines a thread synchronisation object. More...

#include <syncthrd.h>

Inheritance diagram for PCondMutex:
Collaboration diagram for PCondMutex:

Public Member Functions

virtual void WaitCondition ()
 This function attempts to acquire the mutex, but will block not only until the mutex is free, but also that the condition returned by the Condition() function is also met. More...
 
virtual void Signal ()
 If there are waiting (blocked) threads then unblock the first one that was blocked. More...
 
virtual PBoolean Condition ()=0
 This is the condition that must be met for the WaitCondition() function to acquire the mutex. More...
 
virtual void OnWait ()
 This function is called immediately before blocking on the condition in the WaitCondition() function. More...
 
- Public Member Functions inherited from PTimedMutex
 PTimedMutex ()
 
 PTimedMutex (const PDebugLocation &location, unsigned timeout=0)
 
 PTimedMutex (const PTimedMutex &mutex)
 Copy constructor is allowed but does not copy, allocating a new mutex. More...
 
PTimedMutexoperator= (const PTimedMutex &)
 Assignment operator is allowed but does nothing. More...
 
 ~PTimedMutex ()
 Destruction. More...
 
virtual void Wait ()
 Block until the synchronisation object is available. More...
 
virtual PBoolean Wait (const PTimeInterval &timeout)
 Block, for a time, until the synchronisation object is available. More...
 
PINLINE bool Try ()
 Try to enter the critical section for exlusive access. More...
 
virtual void PrintOn (ostream &strm) const
 Output the contents of the object to the stream. More...
 
- Public Member Functions inherited from PSync
 PSync ()
 
virtual bool InstrumentedWait (const PTimeInterval &timeout, const PDebugLocation &)
 As for Wait() but with location of call for instrumentation. Mostly used internally. More...
 
virtual void InstrumentedSignal (const PDebugLocation &)
 As for Signal() but with location of call for instrumentation. Mostly used internally. More...
 
- Public Member Functions inherited from PObject
__inline unsigned GetTraceContextIdentifier () const
 Get PTRACE context identifier. More...
 
__inline void SetTraceContextIdentifier (unsigned id)
 
__inline void SetTraceContextIdentifier (const PObject &obj)
 
__inline void SetTraceContextIdentifier (const PObject *obj)
 
__inline void CopyTraceContextIdentifier (PObject &obj) const
 
__inline void CopyTraceContextIdentifier (PObject *obj) const
 
virtual ~PObject ()
 
__inline const char * GetClass () const
 
__inline bool IsClass (const char *name) const
 
__inline const PObjectPTraceObjectInstance () const
 
virtual PObjectClone () const
 Create a copy of the class on the heap. More...
 
template<class CLS >
CLS * CloneAs () const
 As for Clone() but converts to specified type. More...
 
virtual PINDEX HashFunction () const
 This function yields a hash value required by the PDictionary class. More...
 
virtual Comparison Compare (const PObject &obj) const
 Compare the two objects and return their relative rank. More...
 
virtual Comparison CompareObjectMemoryDirect (const PObject &obj) const
 Determine the byte wise comparison of two objects. More...
 
bool operator== (const PObject &obj) const
 Compare the two objects. More...
 
bool operator!= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator< (const PObject &obj) const
 Compare the two objects. More...
 
bool operator> (const PObject &obj) const
 Compare the two objects. More...
 
bool operator<= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator>= (const PObject &obj) const
 Compare the two objects. More...
 
virtual void ReadFrom (istream &strm)
 Input the contents of the object from the stream. More...
 
- Public Member Functions inherited from PMutexExcessiveLockInfo
void SetLocationName (const char *name)
 

Protected Attributes

PSyncPoint syncPoint
 
- Protected Attributes inherited from PTimedMutex
PThreadIdentifier m_lockerId
 
PThreadIdentifier m_lastLockerId
 
PUniqueThreadIdentifier m_lastUniqueId
 
unsigned m_lockCount
 
- Protected Attributes inherited from PObject
unsigned m_traceContextIdentifier
 
- Protected Attributes inherited from PMutexExcessiveLockInfo
PDebugLocation m_location
 
unsigned m_excessiveLockTimeout
 
atomic< bool > m_excessiveLockActive
 
uint64_t m_startHeldSamplePoint
 

Additional Inherited Members

- Public Types inherited from PTimedMutex
enum  DeadlockStackWalkModes { DeadlockStackWalkDisabled, DeadlockStackWalkEnabled, DeadlockStackWalkOnPhantomRelease, DeadlockStackWalkNoSymbols }
 
- Public Types inherited from PObject
enum  Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
 Result of the comparison operation performed by the Compare() function. More...
 
- Static Public Member Functions inherited from PObject
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject *from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject *from)
 
static __inline const char * Class ()
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
template<typename T >
static Comparison Compare2 (T v1, T v2)
 Compare two types, returning Comparison type. More...
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
- Static Public Attributes inherited from PTimedMutex
static unsigned ExcessiveLockWaitTime
 
static DeadlockStackWalkModes DeadlockStackWalkMode
 
- Protected Member Functions inherited from PTimedMutex
void Construct ()
 
void PlatformConstruct ()
 
bool PlatformWait (const PTimeInterval &timeout)
 
void PlatformSignal (const PDebugLocation *location)
 
void InternalWait (const PDebugLocation *location)
 
void InternalWaitComplete (uint64_t startWaitCycle, const PDebugLocation *location)
 
bool InternalSignal (const PDebugLocation *location)
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 
- Protected Member Functions inherited from PMutexExcessiveLockInfo
 PMutexExcessiveLockInfo ()
 
 PMutexExcessiveLockInfo (const PDebugLocation &location, unsigned timeout)
 
 PMutexExcessiveLockInfo (const PMutexExcessiveLockInfo &other)
 
virtual ~PMutexExcessiveLockInfo ()
 
void Construct (unsigned timeout)
 
void PrintOn (ostream &strm) const
 
void ExcessiveLockPhantom (const PObject &mutex) const
 
virtual void AcquiredLock (uint64_t startWaitCycle, bool readOnly, const PDebugLocation &location)
 
virtual void ReleasedLock (const PObject &mutex, uint64_t startHeldSamplePoint, bool readOnly, const PDebugLocation &location)
 
- Static Protected Member Functions inherited from PMutexExcessiveLockInfo
static unsigned MinDeadlockTime (unsigned waitTime)
 

Detailed Description

This class defines a thread synchronisation object.

This is a special type of mutual exclusion, where a thread wishes to get exlusive use of a resource but only if a certain other condition is met.

Member Function Documentation

virtual PBoolean PCondMutex::Condition ( )
pure virtual

This is the condition that must be met for the WaitCondition() function to acquire the mutex.

Implemented in PIntCondMutex.

virtual void PCondMutex::OnWait ( )
virtual

This function is called immediately before blocking on the condition in the WaitCondition() function.

This could get called multiple times before the condition is met and the WaitCondition() function returns.

virtual void PCondMutex::Signal ( )
virtual

If there are waiting (blocked) threads then unblock the first one that was blocked.

If no waiting threads and the count is less than the maximum then increment the semaphore.

Reimplemented from PTimedMutex.

virtual void PCondMutex::WaitCondition ( )
virtual

This function attempts to acquire the mutex, but will block not only until the mutex is free, but also that the condition returned by the Condition() function is also met.

Member Data Documentation

PSyncPoint PCondMutex::syncPoint
protected

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