From 24abd31b4d1ca03baeb72fc1c7fc031ea7b11a88 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 1 Nov 2017 10:14:09 +0100 Subject: [PATCH] Use explicit atomic operations. --- src/simix/smx_synchro.cpp | 5 ++--- src/simix/smx_synchro_private.hpp | 7 ++----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/simix/smx_synchro.cpp b/src/simix/smx_synchro.cpp index 78c4935667..6194069658 100644 --- a/src/simix/smx_synchro.cpp +++ b/src/simix/smx_synchro.cpp @@ -364,14 +364,13 @@ void SIMIX_cond_unref(smx_cond_t cond) void intrusive_ptr_add_ref(s_smx_cond_t *cond) { - auto previous = (cond->refcount_)++; + auto previous = cond->refcount_.fetch_add(1); xbt_assert(previous != 0); } void intrusive_ptr_release(s_smx_cond_t *cond) { - auto count = --(cond->refcount_); - if (count == 0) { + if (cond->refcount_.fetch_sub(1) == 1) { xbt_assert(xbt_swag_size(cond->sleeping) == 0, "Cannot destroy conditional since someone is still using it"); xbt_swag_free(cond->sleeping); diff --git a/src/simix/smx_synchro_private.hpp b/src/simix/smx_synchro_private.hpp index 734998207d..5846b045f1 100644 --- a/src/simix/smx_synchro_private.hpp +++ b/src/simix/smx_synchro_private.hpp @@ -31,15 +31,12 @@ public: // boost::intrusive_ptr support: friend void intrusive_ptr_add_ref(MutexImpl* mutex) { - // Atomic operation! Do not split in two instructions! - XBT_ATTRIB_UNUSED auto previous = (mutex->refcount_)++; + XBT_ATTRIB_UNUSED auto previous = mutex->refcount_.fetch_add(1); xbt_assert(previous != 0); } friend void intrusive_ptr_release(MutexImpl* mutex) { - // Atomic operation! Do not split in two instructions! - auto count = --(mutex->refcount_); - if (count == 0) + if (mutex->refcount_.fetch_sub(1) == 1) delete mutex; } -- 2.20.1