Module Luv.Mutex

Mutexes.

See Synchronization primitives in the user guide and Mutex locks in libuv.

type t = Luv_c_types.Mutex.t Ctypes.ptr

Binds uv_mutex_t.

val init : ?recursive:bool -> unit -> (t, Error.t) Stdlib.result

Allocates and initializes a mutex.

Binds uv_mutex_init. See pthread_mutex_init(3p).

If ?recursive is set to true, calls uv_mutex_init_recursive instead.

?recursive requires libuv 1.15.0.

Feature check: Luv.Require.(has mutex_init_recursive)

val destroy : t -> unit

Cleans up a mutex.

Binds uv_mutex_destroy. See pthread_mutex_destroy(3p).

val lock : t -> unit

Takes a mutex.

Binds uv_mutex_lock. See pthread_mutex_lock(3p).

The calling thread is blocked until it obtains the mutex.

val trylock : t -> (unit, Error.t) Stdlib.result

Tries to take the mutex without blocking.

Binds uv_mutex_trylock. See pthread_mutex_trylock(3p).

val unlock : t -> unit

Releases the mutex.

Binds uv_mutex_unlock. See pthread_mutex_unlock(3p).