...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_semaphore
// In header: <boost/interprocess/sync/interprocess_semaphore.hpp> class interprocess_semaphore { public: // construct/copy/destruct interprocess_semaphore(int); ~interprocess_semaphore(); // public member functions void post() ; void wait() ; bool try_wait() ; bool timed_wait(const boost::posix_time::ptime &) ; };
Wraps a interprocess_semaphore that can be placed in shared memory and can be shared between processes. Allows timed lock tries
interprocess_semaphore
public member functionsvoid post() ;
Increments the interprocess_semaphore count. If there are processes/threads blocked waiting for the interprocess_semaphore, then one of these processes will return successfully from its wait function. If there is an error an interprocess_exception exception is thrown.
void wait() ;
Decrements the interprocess_semaphore. If the interprocess_semaphore value is not greater than zero, then the calling process/thread blocks until it can decrement the counter. If there is an error an interprocess_exception exception is thrown.
bool try_wait() ;
Decrements the interprocess_semaphore if the interprocess_semaphore's value is greater than zero and returns true. If the value is not greater than zero returns false. If there is an error an interprocess_exception exception is thrown.
bool timed_wait(const boost::posix_time::ptime & abs_time) ;
Decrements the interprocess_semaphore if the interprocess_semaphore's value is greater than zero and returns true. Otherwise, waits for the interprocess_semaphore to the posted or the timeout expires. If the timeout expires, the function returns false. If the interprocess_semaphore is posted the function returns true. If there is an error throws sem_exception