...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::interprocess::interprocess_recursive_mutex
// In header: <boost/interprocess/sync/interprocess_recursive_mutex.hpp> class interprocess_recursive_mutex { public: // construct/copy/destruct interprocess_recursive_mutex(); ~interprocess_recursive_mutex(); // public member functions void lock(); bool try_lock(); template<typename TimePoint> bool timed_lock(const TimePoint &); template<typename TimePoint> bool try_lock_until(const TimePoint &); template<typename Duration> bool try_lock_for(const Duration &); void unlock(); };
Wraps a interprocess_mutex that can be placed in shared memory and can be shared between processes. Allows several locking calls by the same process. Allows timed lock tries
interprocess_recursive_mutex
public
construct/copy/destructinterprocess_recursive_mutex();
Constructor. Throws interprocess_exception
on error.
~interprocess_recursive_mutex();
Destructor. If any process uses the mutex after the destructor is called the result is undefined. Does not throw.
interprocess_recursive_mutex
public member functionsvoid lock();
Effects: The calling thread tries to obtain ownership of the mutex, and if another thread has ownership of the mutex, it waits until it can obtain the ownership. If a thread takes ownership of the mutex the mutex must be unlocked by the same mutex. The mutex must be unlocked the same number of times it is locked. Throws: interprocess_exception
on error.
Note: A program shall not deadlock if the thread that has ownership calls this function.
bool try_lock();
Tries to lock the interprocess_mutex
, returns false when interprocess_mutex
is already locked, returns true when success. The mutex must be unlocked the same number of times it is locked. Throws: interprocess_exception
if a severe error is found
Note: A program shall not deadlock if the thread that has ownership calls this function.
template<typename TimePoint> bool timed_lock(const TimePoint & abs_time);
Tries to lock the interprocess_mutex
, if interprocess_mutex
can't be locked before abs_time time, returns false. The mutex must be unlocked the same number of times it is locked. Throws: interprocess_exception
if a severe error is found
Note: A program shall not deadlock if the thread that has ownership calls this function.
template<typename TimePoint> bool try_lock_until(const TimePoint & abs_time);
Same as timed_lock
, but this function is modeled after the standard library interface.
template<typename Duration> bool try_lock_for(const Duration & dur);
Same as timed_lock
, but this function is modeled after the standard library interface.
void unlock();
Effects: The calling thread releases the exclusive ownership of the mutex. If the mutex supports recursive locking, the mutex must be unlocked the same number of times it is locked. Throws: interprocess_exception
on error.