#include <Semaphore.hpp>
Public Member Functions | |
Semaphore (unsigned int initial) | |
void | reset (unsigned int initial) |
bool | has_waiter () |
void | post () |
Increment (and signal any waiters). | |
void | wait () |
Wait until count is > 0, then decrement. | |
bool | try_wait () |
Non-blocking version of wait(). |
This was created to provide an alternative debuggable implementation of semaphores based on a cond/mutex pair because semaphore's appeared not to work in GDB. Turns out sem_wait can fail when run in GDB, and Debian really needs to update it's man pages.
This class remains as a trivial (yet pretty) wrapper/abstraction, because Glib (idiotically) doesn't have a Semaphore class.
void Raul::Semaphore::post | ( | ) | [inline] |
void Raul::Semaphore::wait | ( | ) | [inline] |
Wait until count is > 0, then decrement.
Note that sem_wait always returns 0 in practise. It returns nonzero when run in GDB, so the while is necessary to allow debugging.
Obviously not realtime safe.
Referenced by Raul::Command::operator()().
bool Raul::Semaphore::try_wait | ( | ) | [inline] |
Non-blocking version of wait().