#ifndef SIMGRID_S4U_MUTEX_HPP
#define SIMGRID_S4U_MUTEX_HPP
+#include <mutex>
#include <utility>
#include <boost/intrusive_ptr.hpp>
namespace simgrid {
namespace s4u {
-XBT_PUBLIC_CLASS Mutex {
+class ConditionVariable;
+XBT_PUBLIC_CLASS Mutex {
+friend ConditionVariable;
public:
Mutex() :
mutex_(simcall_mutex_init()) {}
- Mutex(simgrid::simix::Mutex* mutex) : mutex_(SIMIX_mutex_dup(mutex)) {}
+ Mutex(simgrid::simix::Mutex* mutex) : mutex_(SIMIX_mutex_ref(mutex)) {}
~Mutex()
{
- SIMIX_mutex_destroy(mutex_);
+ SIMIX_mutex_unref(mutex_);
}
// Copy+move (with the copy-and-swap idiom):
- Mutex(Mutex const& mutex) : mutex_(SIMIX_mutex_dup(mutex.mutex_)) {}
+ Mutex(Mutex const& mutex) : mutex_(SIMIX_mutex_ref(mutex.mutex_)) {}
friend void swap(Mutex& first, Mutex& second)
{
using std::swap;
private:
simgrid::simix::Mutex* mutex_;
};
+
}} // namespace simgrid::s4u
#endif /* SIMGRID_S4U_MUTEX_HPP */