sig
  type 'a t = 'Thread_safe_queue.t
  val create : unit -> 'a t
  val create' : unit -> (unit -> 'a option) * ('-> unit)
  val dequeue : 'a t -> 'a option
  val dequeue_until_empty : 'a t -> ('-> unit) -> unit
  val enqueue : 'a t -> '-> unit
  val length : 'a t -> int
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
end