Module Async_kernel.Bvar

A Bvar is a synchronization point that allows one to broadcast a value to clients waiting on the broadcast. With a Bvar, one can efficiently notify multiple clients of edge-triggered conditions, repeating as each edge trigger occurs.

Bvar is like an ivar/deferred, except that it is always "empty" and can be repeatedly "filled" (via broadcast).

Another way to view Bvar is as a restriction of Condition that supports only broadcast, not signaling a single waiter. Dropping signal simplifies the implementation significantly.

The 'permissions parameter is used read/write permissions. Also see Perms.

type ('a, -'permissions) t = ('a'permissionsAsync_kernel__.Types.Bvar.t
include sig ... end
val sexp_of_t : ('a ‑> Sexplib.Sexp.t) ‑> ('permissions ‑> Sexplib.Sexp.t) ‑> ('a'permissionst ‑> Sexplib.Sexp.t
include Core_kernel.Invariant.S2 with type (a, permissions) t := (a, permissions) t
type ('a, 'b) t
val create : unit ‑> ('aCore_kernel.read_writet
val wait : ('a, [> Core_kernel.read ]) t ‑> 'a Async_kernel__.Deferred0.t

wait t becomes determined by the next call to broadcast t a.

val broadcast : ('a, [> Core_kernel.write ]) t ‑> 'a ‑> unit
val has_any_waiters : ('a_t ‑> bool

has_any_waiters t returns true iff there has been a call to wait t since the most recent call to broadcast t.