c++-gtk-utils
|
A scoped locking class for exception safe Mutex locking which tracks the status of its mutex. More...
#include <c++-gtk-utils/mutex.h>
Public Member Functions | |
int | lock () |
int | trylock () |
int | unlock () |
bool | is_owner () const |
TrackLock (Mutex &mutex_) | |
TrackLock (Mutex &mutex_, Locked tag) | |
TrackLock (Mutex &mutex_, DeferLock tag) | |
~TrackLock () | |
Friends | |
class | Cond |
A scoped locking class for exception safe Mutex locking which tracks the status of its mutex.
This class is similar to a Mutex::Lock object, except that it tracks whether the mutex it manages is locked by the thread creating the Mutex::TrackLock object (provided that, while the Mutex::TrackLock object exists, the thread creating it only accesses the mutex through that object). This enables Mutex::TrackLock::unlock() to be used without it being followed later by a call to Mutex::TrackLock::lock() or a successful call to Mutex::TrackLock::trylock(), and also permits locking to be deferred until after construction of the lock object. Note that only one thread may call the methods of any one Mutex::TrackLock object, including causing its destructor to be invoked.
|
inline |
This constructor locks the mutex passed to it. It is not a cancellation point. It does not throw.
mutex_ | The mutex to be locked. |
Since 1.2.1
This constructor takes an already locked mutex (say as a result of Mutex::trylock()), and takes ownership of it. It is not a cancellation point. It does not throw.
mutex_ | The mutex to be managed by this object. |
tag | Pass the Cgu::Thread::locked enum tag to this parameter. |
Since 1.2.1
This constructor defers locking of the mutex (and so taking ownership of it) until an explicit call to lock() or trylock() is made. It is not a cancellation point. It does not throw.
mutex_ | The mutex to be managed by this object. |
tag | Pass the Cgu::Thread::defer enum tag to this parameter. |
Since 1.2.1
|
inline |
The destructor unlocks the managed mutex if it is locked. It is not a cancellation point. It does not throw.
Since 1.2.1
|
inline |
Indicates whether the mutex managed by this Mutex::TrackLock object is locked, and so owned, by it. It does not throw.
Since 1.2.1
|
inline |
Calls Mutex::lock(), and so locks the mutex and acquires ownership. It blocks if the mutex is already locked until the mutex becomes free. This method should normally only be called if a previous call has been made to Mutex::TrackLock::unlock() or this Mutex::TrackLock object has been constructed with the Thread::defer enum tag. It is not a cancellation point. It does not throw.
Since 1.2.1
|
inline |
Calls Mutex::trylock(), and so tries to lock the mutex and acquire ownership, but returns immediately if it is already locked with value EBUSY. This method should normally only be called if a previous call has been made to Mutex::TrackLock::unlock() or this Mutex::TrackLock object has been constructed with the Thread::defer enum tag. It is not a cancellation point. It does not throw.
Since 1.2.1
|
inline |
Calls Mutex::unlock(), and so unlocks a locked mutex owned by the calling thread. It will cause is_owner() to return false unless a subsequent call is made to lock() or a subsequent successful call is made to trylock(). It is not a cancellation point. It does not throw.
Since 1.2.1
|
friend |