X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5f11cdef5b0309cb622f9280488f85fa213e8c1f..77bbf3027c4240a2e833209a3a3f186589da8577:/src/s4u/s4u_mutex.cpp diff --git a/src/s4u/s4u_mutex.cpp b/src/s4u/s4u_mutex.cpp index e64bfd4f60..7e0e8520d6 100644 --- a/src/s4u/s4u_mutex.cpp +++ b/src/s4u/s4u_mutex.cpp @@ -1,29 +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 "src/msg/msg_private.hpp" +#include "src/simix/smx_synchro_private.hpp" #include "xbt/log.h" -#include "src/msg/msg_private.h" -#include "src/simix/smx_network_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); +} + } }