From 0917b3d40163b247c05fe33f60eb71c00a7c6854 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Thu, 28 Aug 2014 15:26:15 +0200 Subject: [PATCH 1/1] Add a xbt wrapper for simcall_mutex_trylock (asked in [#17878]) --- include/xbt/synchro_core.h | 9 +++++++++ src/xbt/xbt_sg_synchro.c | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/include/xbt/synchro_core.h b/include/xbt/synchro_core.h index d4274884c7..2c8e641a1b 100644 --- a/include/xbt/synchro_core.h +++ b/include/xbt/synchro_core.h @@ -79,6 +79,15 @@ XBT_PUBLIC(xbt_mutex_t) xbt_mutex_init(void); /** @brief Blocks onto the given mutex variable */ XBT_PUBLIC(void) xbt_mutex_acquire(xbt_mutex_t mutex); +/** @brief Tries to block onto the given mutex variable + * Tries to lock a mutex, return 1 if the mutex is unlocked, else 0. + * This function does not block and wait for the mutex to be unlocked. + * \param mutex The mutex + * \param issuer The process that tries to acquire the mutex + * \return 1 - mutex free, 0 - mutex used + */ +XBT_PUBLIC(int) xbt_mutex_try_acquire(xbt_mutex_t mutex); + /** @brief Releases the given mutex variable */ XBT_PUBLIC(void) xbt_mutex_release(xbt_mutex_t mutex); diff --git a/src/xbt/xbt_sg_synchro.c b/src/xbt/xbt_sg_synchro.c index 724755b2ae..3221ba8036 100644 --- a/src/xbt/xbt_sg_synchro.c +++ b/src/xbt/xbt_sg_synchro.c @@ -140,6 +140,11 @@ void xbt_mutex_acquire(xbt_mutex_t mutex) simcall_mutex_lock((smx_mutex_t) mutex); } +int xbt_mutex_try_acquire(xbt_mutex_t mutex) +{ + return simcall_mutex_trylock((smx_mutex_t) mutex); +} + void xbt_mutex_release(xbt_mutex_t mutex) { simcall_mutex_unlock((smx_mutex_t) mutex); -- 2.20.1