X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5f11cdef5b0309cb622f9280488f85fa213e8c1f..55b3e236db71d2245c71ff1ea3cbec120a0e0d8d:/src/s4u/s4u_mutex.cpp diff --git a/src/s4u/s4u_mutex.cpp b/src/s4u/s4u_mutex.cpp index e64bfd4f60..4f2cce6deb 100644 --- a/src/s4u/s4u_mutex.cpp +++ b/src/s4u/s4u_mutex.cpp @@ -6,24 +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 { -void Mutex::lock() { +/** @brief Blocks the calling actor until the mutex can be obtained */ +void Mutex::lock() +{ simcall_mutex_lock(mutex_); } -void Mutex::unlock() { +/** @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_); } -bool Mutex::try_lock() { +/** @brief Acquire the mutex if it's free, and return false (without blocking) if not */ +bool Mutex::try_lock() +{ return simcall_mutex_trylock(mutex_); } +/** @brief Create a new mutex + * + * See @ref s4u_raii. + */ +MutexPtr Mutex::createMutex() +{ + smx_mutex_t mutex = simcall_mutex_init(); + return MutexPtr(&mutex->mutex(), false); +} + } }