using IoImplPtr = boost::intrusive_ptr<IoImpl>;
class MutexImpl;
using MutexImplPtr = boost::intrusive_ptr<MutexImpl>;
+ XBT_PUBLIC void intrusive_ptr_add_ref(MutexImpl* mutex);
+ XBT_PUBLIC void intrusive_ptr_release(MutexImpl* mutex);
class RawImpl;
using RawImplPtr = boost::intrusive_ptr<RawImpl>;
class SemaphoreImpl;
class XBT_PUBLIC Mutex {
friend ConditionVariable;
friend kernel::activity::MutexImpl;
+ friend void kernel::activity::intrusive_ptr_release(kernel::activity::MutexImpl* mutex);
kernel::activity::MutexImpl* const pimpl_;
/* refcounting */
friend XBT_PUBLIC void intrusive_ptr_release(const Mutex* mutex);
explicit Mutex(kernel::activity::MutexImpl* mutex) : pimpl_(mutex) {}
+ ~Mutex() = default;
#ifndef DOXYGEN
Mutex(Mutex const&) = delete; // No copy constructor; Use MutexPtr instead
Mutex& operator=(Mutex const&) = delete; // No direct assignment either. Use MutexPtr instead