Up

Module Thread_safe_pipe = Async_unix.Thread_safe_pipe

Signature

type 'a t
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
val create : unit -> 'a Async_unix.Import.Pipe.Reader.t * 'a t

create () returns a reader end, which must be used inside Async, and a writer end, which must be used outside Async. create can be called inside or outside Async.

All the following functions must be called outside Async. They behave as their counterpart in the Pipe module.

val pushback : _ t -> unit

pushback writer blocks the current thread until the pipe is empty or closed.

module Written_or_closed : sig .. end
module If_closed : sig .. end
Functions that write elements to the pipe take an If_closed.t argument to specify how to deal with the possibility that the pipe is closed: Raise on closed pipe, or Return a variant indicating whether the pipe is closed.
val transfer_in_without_pushback : ?wakeup_scheduler:bool -> 'a t -> from:'a Core.Std.Queue.t -> if_closed:'b If_closed.t -> 'b

transfer_in_without_pushback' and write_without_pushback transfer the element(s) into the pipe and return immediately.

val write_without_pushback : ?wakeup_scheduler:bool -> 'a t -> 'a -> if_closed:'b If_closed.t -> 'b
val transfer_in : 'a t -> from:'a Core.Std.Queue.t -> if_closed:'b If_closed.t -> 'b

transfer_in and write transfer the element(s) into the pipe and block the current thread until the pipe is empty or closed (like pushback).

val write : 'a t -> 'a -> if_closed:'b If_closed.t -> 'b
val close : _ t -> unit
val is_closed : _ t -> bool
val closed : _ t -> unit

closed writer blocks the current thread until the pipe is closed.