Utils around Mutex
A value wrapped into a Mutex, for more safety.
A value surrounded with a lock
Create a new protected value.
Sourceval with_lock : 'a t -> ('a -> 'b) -> 'b with_lock l f runs f x where x is the value protected with the lock l, in a critical section. If f x fails, with_lock l f fails too but the lock is released.
Sourceval try_with_lock : 'a t -> ('a -> 'b) -> 'b option try_with_lock l f runs f x in a critical section if l is not locked. x is the value protected by the lock l. If f x fails, try_with_lock l f fails too but the lock is released.
Type allowing to manipulate the lock as a reference.
with_lock_as_ref l f calls f with a reference-like object that allows to manipulate the value of l safely. The object passed to f must not escape the function call.
Sourceval update : 'a t -> ('a -> 'a) -> unit update l f replaces the content x of l with f x, atomically.
Sourceval update_map : 'a t -> ('a -> 'a * 'b) -> 'b update_map l f computes x', y = f (get l), then puts x' in l and returns y.
Atomically get the value in the lock. The value that is returned isn't protected!
Atomically set the value.
Atomically increment the value.
Atomically decrement the value.
Sourceval incr_then_get : int t -> int incr_then_get x increments x, and returns its new value.
Sourceval get_then_incr : int t -> int get_then_incr x increments x, and returns its previous value.
Sourceval decr_then_get : int t -> int decr_then_get x decrements x, and returns its new value.
Sourceval get_then_decr : int t -> int get_then_decr x decrements x, and returns its previous value.
Sourceval get_then_set : bool t -> bool get_then_set b sets b to true, and returns the old value.
Sourceval get_then_clear : bool t -> bool get_then_clear b sets b to false, and returns the old value.