"Mailbox" variables implement a synchronising variable, used for communication between concurrent threads.
This code adapted from Comparing lightweight threads (eigenclass.org)
The type of a mailbox variable. Mailbox variables are used to communicate values between threads in a synchronous way. The type parameter specifies the type of the value propagated from
val create : 'a -> 'a t
create v creates a new mailbox variable containing value
val create_empty : unit -> 'a t
create () creates a new empty mailbox variable.
put mvar value puts a value into a mailbox variable. This value will remain in the mailbox until
take is called to remove it. If the mailbox is not empty, the current thread will block until it is emptied.
take mvar will take any currently available value from the mailbox variable. If no value is currently available, the current thread will block, awaiting a value to be
put by another thread.
val take_available : 'a t -> 'a option
take_available mvar immediately takes the value from
mvar without blocking, returning
None if the mailbox is empty.
val is_empty : 'a t -> bool
is_empty mvar indicates if
put mvar can be called without blocking.