X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/580563c4edbc2c50f9ea72eab17b96ab55007565..6c2c52a21d74a8c75d09d7e31e8f360ab9b1873d:/include/simgrid/s4u/Barrier.hpp diff --git a/include/simgrid/s4u/Barrier.hpp b/include/simgrid/s4u/Barrier.hpp index 4b578983ec..92ece5a673 100644 --- a/include/simgrid/s4u/Barrier.hpp +++ b/include/simgrid/s4u/Barrier.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2018-2019. 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. */ @@ -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,15 +24,25 @@ 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 +} // namespace s4u +} // namespace simgrid #endif