sig
  type t
  type 'a condition
  val create_condition : unit -> '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 -> 'Lwt.t) -> 'Lwt.t
  val wait : Lwt_monitor.t -> 'Lwt_monitor.condition -> 'Lwt.t
  val notify : Lwt_monitor.t -> 'Lwt_monitor.condition -> '-> unit
  val notify_all : Lwt_monitor.t -> 'Lwt_monitor.condition -> '-> unit
end