X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/019d8784441a673767fd76b20a6283b965ead239..8bff32bae7e7bcd9c20695dc02666e6c450a0bdc:/include/simgrid/s4u/Barrier.hpp diff --git a/include/simgrid/s4u/Barrier.hpp b/include/simgrid/s4u/Barrier.hpp index 4b578983ec..b225d9f772 100644 --- a/include/simgrid/s4u/Barrier.hpp +++ b/include/simgrid/s4u/Barrier.hpp @@ -6,10 +6,12 @@ #ifndef SIMGRID_S4U_BARRIER_HPP #define SIMGRID_S4U_BARRIER_HPP -#include "simgrid/s4u/ConditionVariable.hpp" +#include +#include #include #include +#include #include namespace simgrid { @@ -22,13 +24,23 @@ private: unsigned int expected_processes_; unsigned int arrived_processes_ = 0; + /* refcounting */ + std::atomic_int_fast32_t refcount_{0}; + public: explicit Barrier(unsigned int count); ~Barrier() = default; Barrier(Barrier const&) = delete; Barrier& operator=(Barrier const&) = delete; + /** Constructs a new barrier */ + static BarrierPtr create(unsigned int expected_processes); + int wait(); + + /* refcounting */ + friend XBT_PUBLIC void intrusive_ptr_add_ref(Barrier* barrier); + friend XBT_PUBLIC void intrusive_ptr_release(Barrier* barrier); }; } } // namespace simgrid::s4u