X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e63fc8d05c3ae2e35ac7baa6ff7c357b06ddff4f..1067edf07adcaa046abb976e7d92174d608b2d91:/src/kernel/activity/ConditionVariableImpl.hpp diff --git a/src/kernel/activity/ConditionVariableImpl.hpp b/src/kernel/activity/ConditionVariableImpl.hpp index 7945f2a618..a142e90729 100644 --- a/src/kernel/activity/ConditionVariableImpl.hpp +++ b/src/kernel/activity/ConditionVariableImpl.hpp @@ -1,39 +1,38 @@ -/* Copyright (c) 2012-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2012-2023. 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. */ -#ifndef SIMGRID_KERNEL_ACTIVITY_CONDITIONVARIABLEIMPL_HPP -#define SIMGRID_KERNEL_ACTIVITY_CONDITIONVARIABLEIMPL_HPP +#ifndef SIMGRID_KERNEL_ACTIVITY_CONDITIONVARIABLE_HPP +#define SIMGRID_KERNEL_ACTIVITY_CONDITIONVARIABLE_HPP #include "simgrid/s4u/ConditionVariable.hpp" +#include "src/kernel/activity/ActivityImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" + #include -namespace simgrid { -namespace kernel { -namespace activity { +namespace simgrid::kernel::activity { class XBT_PUBLIC ConditionVariableImpl { -public: - ConditionVariableImpl(); - ~ConditionVariableImpl(); - - actor::SynchroList sleeping_; /* list of sleeping processes */ MutexImpl* mutex_ = nullptr; - s4u::ConditionVariable cond_; - - void broadcast(); - void signal(); - void wait(MutexImpl* mutex, double timeout, actor::ActorImpl* issuer); + s4u::ConditionVariable piface_; + actor::SynchroList sleeping_; /* list of sleeping actors*/ -private: std::atomic_int_fast32_t refcount_{1}; friend void intrusive_ptr_add_ref(ConditionVariableImpl* cond); friend void intrusive_ptr_release(ConditionVariableImpl* cond); + +public: + ConditionVariableImpl() : piface_(this){}; + + void remove_sleeping_actor(actor::ActorImpl& actor) { xbt::intrusive_erase(sleeping_, actor); } + const s4u::ConditionVariable* get_iface() const { return &piface_; } + s4u::ConditionVariable* get_iface() { return &piface_; } + void broadcast(); + void signal(); + void wait(MutexImpl* mutex, double timeout, actor::ActorImpl* issuer); }; -} // namespace activity -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::activity #endif