X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c642311b1135f0d4a8f55e5822d9c0b4fb8e5e5d..936d213bbf44dbbcdfdadd3f0a777cb5af9407b8:/src/s4u/s4u_mutex.cpp diff --git a/src/s4u/s4u_mutex.cpp b/src/s4u/s4u_mutex.cpp index 20f6ee2936..5e63f24149 100644 --- a/src/s4u/s4u_mutex.cpp +++ b/src/s4u/s4u_mutex.cpp @@ -1,31 +1,47 @@ -/* Copyright (c) 2006-2015. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "xbt/log.h" #include "src/msg/msg_private.h" -#include "src/simix/smx_network_private.h" +#include "src/simix/smx_synchro_private.hpp" +#include "xbt/log.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()); +} }