[#absl-Notification] = xref:absl.adoc[absl]::Notification :relfileprefix: ../ :mrdocs: Lets threads wait for a single occurrence of a single event. == Synopsis Declared in `<absl/synchronization/notification.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class Notification; ---- == Description The `Notification` object maintains a private boolean "notified" state that transitions to `true` at most once. The `Notification` class provides the following primary member functions: * `HasBeenNotified()` to query its state * `WaitForNotification*()` to have threads wait until the "notified" state is `true`. * `Notify()` to set the notification's "notified" state to `true` and notify all waiting threads that the event has occurred. This method may only be called once. Note that while `Notify()` may only be called once, it is perfectly valid to call any of the `WaitForNotification*()` methods multiple times, from multiple threads ‐‐ even after the notification's "notified" state has been set ‐‐ in which case those methods will immediately return. Note that the lifetime of a `Notification` requires careful consideration; it might not be safe to destroy a notification after calling `Notify()` since it is still legal for other threads to call `WaitForNotification*()` methods on the notification. However, observers responding to a "notified" state of `true` can safely delete the notification without interfering with the call to `Notify()` in the other thread. Memory ordering: For any threads X and Y, if X calls `Notify()`, then any action taken by X before it calls `Notify()` is visible to thread Y after: * Y returns from `WaitForNotification()`, or * Y receives a `true` return value from either `HasBeenNotified()` or `WaitForNotificationWithTimeout()`. == Member Functions [cols="1,4"] |=== | Name| Description | xref:absl/Notification/2constructor-01.adoc[`Notification`] [.small]#[constructor]# | Constructors | xref:absl/Notification/2destructor.adoc[`~Notification`] [.small]#[destructor]# | Destroys the notification. | xref:absl/Notification/operator_assign.adoc[`operator=`] [.small]#[deleted]# | Deleted copy assignment; `Notification` is not copyable. | xref:absl/Notification/HasBeenNotified.adoc[`HasBeenNotified`] | Queries the notification's "notified" state. | xref:absl/Notification/Notify.adoc[`Notify`] | Sets the "notified" state to `true` and wakes waiting threads. | xref:absl/Notification/WaitForNotification.adoc[`WaitForNotification`] | Blocks the calling thread until the notification is notified. | xref:absl/Notification/WaitForNotificationWithDeadline.adoc[`WaitForNotificationWithDeadline`] | Blocks until the notification is notified or a deadline expires. | xref:absl/Notification/WaitForNotificationWithTimeout.adoc[`WaitForNotificationWithTimeout`] | Blocks until the notification is notified or a timeout elapses. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#