X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c642311b1135f0d4a8f55e5822d9c0b4fb8e5e5d..55b3e236db71d2245c71ff1ea3cbec120a0e0d8d:/src/s4u/s4u_mutex.cpp diff --git a/src/s4u/s4u_mutex.cpp b/src/s4u/s4u_mutex.cpp index 20f6ee2936..4f2cce6deb 100644 --- a/src/s4u/s4u_mutex.cpp +++ b/src/s4u/s4u_mutex.cpp @@ -6,26 +6,43 @@ #include "xbt/log.h" #include "src/msg/msg_private.h" -#include "src/simix/smx_network_private.h" +#include "src/simix/smx_synchro_private.h" -#include "simgrid/s4u/mutex.hpp" +#include "simgrid/s4u/Mutex.hpp" +namespace simgrid { +namespace s4u { -using namespace simgrid; +/** @brief Blocks the calling actor until the mutex can be obtained */ +void Mutex::lock() +{ + simcall_mutex_lock(mutex_); +} -s4u::Mutex::Mutex() { - smx_mutex_t smx_mutex = simcall_mutex_init(); - _mutex = std::shared_ptr(smx_mutex, SIMIX_mutex_destroy ); +/** @brief Release the ownership of the mutex, unleashing a blocked actor (if any) + * + * Will fail if the calling actor does not own the mutex. + */ +void Mutex::unlock() +{ + simcall_mutex_unlock(mutex_); } -void s4u::Mutex::lock() { - simcall_mutex_lock(_mutex.get()); +/** @brief Acquire the mutex if it's free, and return false (without blocking) if not */ +bool Mutex::try_lock() +{ + return simcall_mutex_trylock(mutex_); } -void s4u::Mutex::unlock() { - simcall_mutex_unlock(_mutex.get()); +/** @brief Create a new mutex + * + * See @ref s4u_raii. + */ +MutexPtr Mutex::createMutex() +{ + smx_mutex_t mutex = simcall_mutex_init(); + return MutexPtr(&mutex->mutex(), false); } -bool s4u::Mutex::try_lock() { - return simcall_mutex_trylock(_mutex.get()); +} }