Skip to content

Events

include/sync/event.h View source View on GitHub
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

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
void event_init(struct event *e, enum event_type type, bool signaled)
source

Return previous state

bool event_set(struct event *e)
source
bool event_set_full(
    struct event *e,
    enum thread_resume_reason reason,
    void (*callback)(struct thread *)
)
source
bool event_reset(struct event *e)
source
void event_clear(struct event *e)
source
bool event_read_state(struct event *e)
source
bool event_try_wait(struct event *e)
source

This function does not block. It consumes signal for a synchronization event on success

struct thread_wait_object event_wait_object(struct event *e)
source

thread_wait_prepare() with several objects

#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_)}