sig
  module Condition :
    sig
      type t = Condition.t
      val create : unit -> t
      val wait : t -> Mutex.t -> unit
      val signal : t -> unit
      val broadcast : t -> unit
    end
  module Event :
    sig
      type 'a channel = 'Event.channel
      val new_channel : unit -> 'a channel
      type 'a event = 'Event.event
      val send : 'a channel -> '-> unit event
      val receive : 'a channel -> 'a event
      val always : '-> 'a event
      val choose : 'a event list -> 'a event
      val wrap : 'a event -> ('-> 'b) -> 'b event
      val wrap_abort : 'a event -> (unit -> unit) -> 'a event
      val guard : (unit -> 'a event) -> 'a event
      val sync : 'a event -> 'a
      val select : 'a event list -> 'a
      val poll : 'a event -> 'a option
    end
  module Mutex :
    sig
      type t = Mutex.t
      val create : unit -> t
      val lock : t -> unit
      val try_lock : t -> bool
      val unlock : t -> unit
      val synchronize : ?lock:t -> ('-> 'b) -> '-> 'b
      val make : unit -> Extlib.Concurrent.lock
    end
  module RMutex :
    sig
      type t = Extlib_threads.RMutex.t
      val create : unit -> t
      val lock : t -> unit
      val try_lock : t -> bool
      val unlock : t -> unit
      val synchronize : ?lock:t -> ('-> 'b) -> '-> 'b
      val make : unit -> Extlib.Concurrent.lock
    end
  module Thread :
    sig
      type t = Thread.t
      val create : ('-> 'b) -> '-> t
      val self : unit -> t
      val id : t -> int
      val exit : unit -> unit
      val kill : t -> unit
      val delay : float -> unit
      val join : t -> unit
      val wait_read : Unix.file_descr -> unit
      val wait_write : Unix.file_descr -> unit
      val wait_timed_read : Unix.file_descr -> float -> bool
      val wait_timed_write : Unix.file_descr -> float -> bool
      val select :
        Unix.file_descr list ->
        Unix.file_descr list ->
        Unix.file_descr list ->
        float ->
        Unix.file_descr list * Unix.file_descr list * Unix.file_descr list
      val wait_pid : int -> int * Unix.process_status
      val yield : unit -> unit
      val sigmask : Unix.sigprocmask_command -> int list -> int list
      val wait_signal : int list -> int
    end
end