sig
  val create : ('-> unit) -> '-> string -> Thread.t
  val main : unit -> unit
  val shutdown : unit -> unit
  exception Exit
  val join_all : unit -> unit
  val running : string -> Thread.t -> bool
  type priority = Blocking | Maybe_blocking | Non_blocking
  val scheduler : Tutils.priority Duppy.scheduler
  val need_non_blocking_queue : unit -> unit
  val wait : Condition.t -> Mutex.t -> (unit -> bool) -> unit
  val mutexify : Mutex.t -> ('-> 'b) -> '-> 'b
  exception Timeout
  val wait_for :
    ?mutex:Mutex.t ->
    ?log:(string -> unit) ->
    [ `Both | `Read | `Write ] -> Unix.file_descr -> float -> unit
  val finalize : k:(unit -> unit) -> (unit -> 'a) -> 'a
  val seems_locked : Mutex.t -> bool
  val lazy_cell : (unit -> 'a) -> unit -> 'a
  val stoppable_thread :
    ((unit -> bool) * (unit -> unit) -> unit) ->
    string -> (unit -> unit) * (unit -> unit)
end