Events
include/sync/event.h View source View on GitHubStructs
Section titled “Structs” struct event (3 fields) source
§
struct thread_wait_header header §
enum event_type type §
atomic_bool signaled Set under header->lock, but clears can be lockless
event_type
Section titled “event_type” enum event_type : uint8_t (2 variants) source
This event model is somewhat similar to KEVENT in Windows. Notification events satisfy every single wait and remain “latched” until they get explicitly cleared. Synchronization events (auto resets) satisfy one wait and clear themselves.
If waiters exist, the signal is handed directly and the event doesn’t get perceived as signalled.
Event may be freed ONLY on event_wait returns
§
EVENT_NOTIFICATION §
EVENT_SYNCHRONIZATION Functions
Section titled “Functions”event_init
Section titled “event_init”void event_init(struct event *e, enum event_type type, bool signaled) source Return previous state
event_set
Section titled “event_set”event_set_full
Section titled “event_set_full”bool event_set_full(
struct event *e,
enum thread_resume_reason reason,
void (*callback)(struct thread *)
) source event_reset
Section titled “event_reset”event_clear
Section titled “event_clear”event_read_state
Section titled “event_read_state”event_try_wait
Section titled “event_try_wait”This function does not block. It consumes signal for a synchronization event on success
event_wait_object
Section titled “event_wait_object”struct thread_wait_object event_wait_object(struct event *e) source thread_wait_prepare() with several objects
Macros
Section titled “Macros”EVENT_INIT
Section titled “EVENT_INIT”#define EVENT_INIT(name_, type_, signaled_) source Expansion
#define EVENT_INIT(name_, type_, signaled_) \
{.header = THREAD_WAIT_HEADER_INIT((name_).header), \
.type = (type_), \
.signaled = (signaled_)}