sig
  type !'a t
  val make : '-> 'Atomic.t
  val make_contended : '-> 'Atomic.t
  val get : 'Atomic.t -> 'a
  val set : 'Atomic.t -> '-> unit
  val exchange : 'Atomic.t -> '-> 'a
  val compare_and_set : 'Atomic.t -> '-> '-> bool
  val fetch_and_add : int Atomic.t -> int -> int
  val incr : int Atomic.t -> unit
  val decr : int Atomic.t -> unit
  module Loc :
    sig
      type 'a t = 'a atomic_loc
      external get : 'Atomic.Loc.t -> 'a = "%atomic_load_loc"
      val set : 'Atomic.Loc.t -> '-> unit
      external exchange : 'Atomic.Loc.t -> '-> 'a
        = "%atomic_exchange_loc"
      external compare_and_set : 'Atomic.Loc.t -> '-> '-> bool
        = "%atomic_cas_loc"
      external fetch_and_add : int Atomic.Loc.t -> int -> int
        = "%atomic_fetch_add_loc"
      val incr : int Atomic.Loc.t -> unit
      val decr : int Atomic.Loc.t -> unit
    end
end