Pigweed
 
Loading...
Searching...
No Matches
pw::sync::ThreadNotification Class Reference

#include <thread_notification.h>

Inheritance diagram for pw::sync::ThreadNotification:
pw::sync::TimedThreadNotification

Public Types

using native_handle_type = backend::NativeThreadNotificationHandle
 

Public Member Functions

 ThreadNotification (const ThreadNotification &)=delete
 
 ThreadNotification (ThreadNotification &&)=delete
 
ThreadNotificationoperator= (const ThreadNotification &)=delete
 
ThreadNotificationoperator= (ThreadNotification &&)=delete
 
void acquire ()
 
bool try_acquire ()
 
void release ()
 
native_handle_type native_handle ()
 

Detailed Description

The ThreadNotification is a synchronization primitive that can be used to permit a SINGLE thread to block and consume a latching, saturating notification from multiple notifiers.

IMPORTANT: This is a single consumer/waiter, multiple producer/notifier API! The acquire APIs must only be invoked by a single consuming thread. As a result, having multiple threads receiving notifications via the acquire API is unsupported.

This is effectively a subset of a binary semaphore API, except that only a single thread can be notified and block at a time.

The single consumer aspect of the API permits the use of a smaller and/or faster native APIs such as direct thread signaling.

The ThreadNotification is initialized to being empty (latch is not set).

Member Function Documentation

◆ acquire()

void pw::sync::ThreadNotification::acquire ( )

Blocks indefinitely until the thread is notified, i.e. until the notification latch can be cleared because it was set.

Clears the notification latch.

IMPORTANT: This should only be used by a single consumer thread.

◆ release()

void pw::sync::ThreadNotification::release ( )

Notifies the thread in a saturating manner, setting the notification latch.

Raising the notification multiple time without it being acquired by the consuming thread is equivalent to raising the notification once to the thread. The notification is latched in case the thread was not waiting at the time.

This is IRQ and thread safe.

◆ try_acquire()

bool pw::sync::ThreadNotification::try_acquire ( )

Returns whether the thread has been notified, i.e. whether the notificion latch was set and resets the latch regardless.

Clears the notification latch.

Returns true if the thread was notified, meaning the the internal latch was reset successfully.

IMPORTANT: This should only be used by a single consumer thread.


The documentation for this class was generated from the following file: