X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d656f9465e7b1c36319f86eeafdcec58fe9551a4..53665b99d0b7d1b7444a396a791f6629eb71822b:/src/simix/smx_synchro_private.hpp diff --git a/src/simix/smx_synchro_private.hpp b/src/simix/smx_synchro_private.hpp index 734998207d..0ba8d40431 100644 --- a/src/simix/smx_synchro_private.hpp +++ b/src/simix/smx_synchro_private.hpp @@ -7,63 +7,23 @@ #define SIMIX_SYNCHRO_PRIVATE_H #include "simgrid/s4u/ConditionVariable.hpp" -#include "xbt/swag.h" +#include "src/simix/ActorImpl.hpp" +#include -namespace simgrid { -namespace simix { - -class XBT_PUBLIC() MutexImpl { -public: - MutexImpl(); - ~MutexImpl(); - MutexImpl(MutexImpl const&) = delete; - MutexImpl& operator=(MutexImpl const&) = delete; - - void lock(smx_actor_t issuer); - bool try_lock(smx_actor_t issuer); - void unlock(smx_actor_t issuer); - - bool locked = false; - smx_actor_t owner = nullptr; - // List of sleeping processes: - xbt_swag_t sleeping = nullptr; - - // 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_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) - delete mutex; - } - - simgrid::s4u::Mutex& mutex() { return mutex_; } - -private: - std::atomic_int_fast32_t refcount_{1}; - simgrid::s4u::Mutex mutex_; -}; -} -} +smx_activity_t SIMIX_synchro_wait(sg_host_t smx_host, double timeout); struct s_smx_cond_t { s_smx_cond_t() : cond_(this) {} std::atomic_int_fast32_t refcount_{1}; smx_mutex_t mutex = nullptr; - xbt_swag_t sleeping = nullptr; /* list of sleeping process */ + simgrid::simix::SynchroList sleeping; /* list of sleeping processes */ simgrid::s4u::ConditionVariable cond_; }; struct s_smx_sem_t { unsigned int value; - xbt_swag_t sleeping; /* list of sleeping process */ + simgrid::simix::SynchroList sleeping; /* list of sleeping processes */ }; XBT_PRIVATE void SIMIX_post_synchro(smx_activity_t synchro);