package async_kernel

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file async_condition.ml

1
2
3
4
5
6
7
8
9
10
11
12
open Core

type 'a t = { waits : 'a Ivar.t Queue.t } [@@deriving sexp_of]

let create () = { waits = Queue.create () }
let wait t = Deferred.create (fun ivar -> Queue.enqueue t.waits ivar)
let signal t a = Option.iter (Queue.dequeue t.waits) ~f:(fun ivar -> Ivar.fill_exn ivar a)

let broadcast t a =
  Queue.iter t.waits ~f:(fun ivar -> Ivar.fill_exn ivar a);
  Queue.clear t.waits
;;
OCaml

Innovation. Community. Security.