X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Funix%2Fmutex.cpp;fp=source%2Fcore%2Funix%2Fmutex.cpp;h=15e5c9a213dbce4893851d3641aa036b340be2ad;hp=0000000000000000000000000000000000000000;hb=609c9a508cfdc7b42c46c4f21d17639204165a00;hpb=b4806214e905752617691f851717033fd3f266c2 diff --git a/source/core/unix/mutex.cpp b/source/core/unix/mutex.cpp new file mode 100644 index 0000000..15e5c9a --- /dev/null +++ b/source/core/unix/mutex.cpp @@ -0,0 +1,41 @@ +#include +#include +#include "mutex.h" +#include "mutex_private.h" +#include "systemerror.h" + +namespace Msp { + +Mutex::Mutex(): + priv(new Private) +{ + pthread_mutex_init(&priv->mutex, 0); +} + +Mutex::~Mutex() +{ + pthread_mutex_destroy(&priv->mutex); + delete priv; +} + +void Mutex::lock() +{ + if(int err = pthread_mutex_lock(&priv->mutex)) + throw system_error("pthread_mutex_lock", err); +} + +bool Mutex::trylock() +{ + int err = pthread_mutex_trylock(&priv->mutex); + if(err && err!=EBUSY) + throw system_error("pthread_mutex_trylock", err); + return !err; +} + +void Mutex::unlock() +{ + if(int err = pthread_mutex_unlock(&priv->mutex)) + throw system_error("pthread_mutex_unlock", err); +} + +} // namespace Msp