sig
  type t
  type 'a condition
  val create_condition : unit -> 'a Lwt_monitor.condition
  val create : unit -> Lwt_monitor.t
  val lock : Lwt_monitor.t -> unit Lwt.t
  val unlock : Lwt_monitor.t -> unit
  val with_lock : Lwt_monitor.t -> (unit -> 'a Lwt.t) -> 'a Lwt.t
  val wait : Lwt_monitor.t -> 'a Lwt_monitor.condition -> 'a Lwt.t
  val notify : Lwt_monitor.t -> 'a Lwt_monitor.condition -> 'a -> unit
  val notify_all : Lwt_monitor.t -> 'a Lwt_monitor.condition -> 'a -> unit
end