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 | |
TrackLock (const Mutex::TrackLock &) | |
Mutex::TrackLock & | operator= (const Mutex::TrackLock &) |
int | lock () |
int | trylock () |
int | unlock () |
bool | is_owner () const |
TrackLock (Mutex &mutex_) | |
TrackLock (Mutex &mutex_, Locked tag) | |
TrackLock (Mutex &mutex_, DeferLock tag) | |
TrackLock () | |
~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.
Cgu::Thread::Mutex::TrackLock::TrackLock | ( | const Mutex::TrackLock & | ) |
This class cannot be copied. The copy constructor is deleted.
Cgu::Thread::Mutex::TrackLock::TrackLock | ( | Mutex & | mutex_ | ) | [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. |
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. |
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. |
Cgu::Thread::Mutex::TrackLock::TrackLock | ( | ) |
This class requires initialisation with a Mutex. The default constructor is deleted.
Cgu::Thread::Mutex::TrackLock::~TrackLock | ( | ) | [inline] |
The destructor unlocks the managed mutex if it is locked. It is not a cancellation point. It does not throw.
bool Cgu::Thread::Mutex::TrackLock::is_owner | ( | ) | const [inline] |
Indicates whether the mutex managed by this Mutex::TrackLock object is locked, and so owned, by it.
int Cgu::Thread::Mutex::TrackLock::lock | ( | ) | [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.
Mutex::TrackLock& Cgu::Thread::Mutex::TrackLock::operator= | ( | const Mutex::TrackLock & | ) |
This class cannot be copied. The assignment operator is deleted.
int Cgu::Thread::Mutex::TrackLock::trylock | ( | ) | [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.
int Cgu::Thread::Mutex::TrackLock::unlock | ( | ) | [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.
friend class Cond [friend] |