5#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_SYNCHRONIZATION_MANUAL_RESET_EVENT_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_SYNCHRONIZATION_MANUAL_RESET_EVENT_HPP_
13#include <system_error>
16#include "arene/base/compiler_support/attributes.hpp"
46 static_cast<
void>(sem_destroy(&sem_));
63 if (!signalled_.exchange(
true, std::memory_order_release)) {
64 ensure_semaphore_initialized();
73 if (signalled_.load(std::memory_order_acquire)) {
74 signalled_.store(
false, std::memory_order_release);
87 void wait_on_semaphore()
const {
88 if (sem_wait(&sem_) != 0) {
95 void post_semaphore()
const {
96 if (sem_post(&sem_) != 0) {
103 void ensure_semaphore_initialized()
const {
104 std::call_once(init_flag_, [
this]() {
105 if (sem_init(&sem_, 0, 0) != 0) {
106 throw_errno_as_system_error();
113 std::atomic<
bool> signalled_{
false};
115 mutable bool initialized_{
false};
117 mutable std::once_flag init_flag_{};
119 mutable sem_t sem_{};
126 if (!signalled_.load(std::memory_order_acquire)) {
127 ensure_semaphore_initialized();
128 if (!signalled_.load(std::memory_order_acquire)) {
An event class that allows blocking waits from an arbitrary number of threads that are then woken whe...
Definition manual_reset_event.hpp:38
manual_reset_event(manual_reset_event &&)=delete
Not movable.
void signal()
Signal the event and wake any blocked waiters.
Definition manual_reset_event.hpp:62
constexpr manual_reset_event() noexcept=default
Initialize the event to an unsignalled state.
auto operator=(manual_reset_event const &) -> manual_reset_event &=delete
Not copyable.
void wait() const
Wait for the event to be signalled. Return immediately if it is already signalled.
Definition manual_reset_event.hpp:125
manual_reset_event(manual_reset_event const &)=delete
Not copyable.
auto operator=(manual_reset_event &&) -> manual_reset_event &=delete
Not movable.
~manual_reset_event()
Destroy the event; destroy the semaphore if it is initialized.
Definition manual_reset_event.hpp:44
void reset()
Reset the event to an unsignalled state.
Definition manual_reset_event.hpp:72
Definition array_exceptions_disabled.cpp:11
ARENE_NORETURN void throw_errno_as_system_error()
Throw std::system_error based on the value of errno.
Definition manual_reset_event.hpp:29
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10