*
*/
class XBT_PUBLIC Semaphore {
- kernel::activity::SemaphoreImpl* const pimpl_;
- std::atomic_int_fast32_t refcount_{0};
+ friend kernel::activity::SemaphoreImpl;
+ friend void kernel::activity::intrusive_ptr_release(kernel::activity::SemaphoreImpl* sem);
- friend void intrusive_ptr_add_ref(Semaphore* sem);
- friend void intrusive_ptr_release(Semaphore* sem);
+ kernel::activity::SemaphoreImpl* const pimpl_;
-public:
- explicit Semaphore(unsigned int initial_capacity);
- ~Semaphore();
+ friend void intrusive_ptr_add_ref(const Semaphore* sem);
+ friend void intrusive_ptr_release(const Semaphore* sem);
+ explicit Semaphore(kernel::activity::SemaphoreImpl* sem) : pimpl_(sem) {}
+ ~Semaphore() = default;
#ifndef DOXYGEN
Semaphore(Semaphore const&) = delete; // No copy constructor. Use SemaphorePtr instead
Semaphore& operator=(Semaphore const&) = delete; // No direct assignment either. Use SemaphorePtr instead
#endif
+public:
/** Constructs a new semaphore */
static SemaphorePtr create(unsigned int initial_capacity);