`Kcas_data.Accumulator`

Scalable accumulator.

A scalable accumulator can be used to scalably accumulate an integer value in parallel as long as the accumulated value is read infrequently.

`val make : int -> t`

`make n`

returns a new accumulator whose initial value is `n`

.

`module Xt : sig ... end`

Explicit transaction log passing on accumulators.

`val add : t -> int -> unit`

`add a n`

increments the value of the accumulator `a`

by `n`

. `add`

operations can be performed scalably in parallel.

`val incr : t -> unit`

`incr a`

is equivalent to `add a 1`

.

`val decr : t -> unit`

`decr a`

is equivalent to `add a (-1)`

.

`val get : t -> int`

`get a`

returns the current value of the accumulator.

**CAUTION**: Performing a `get`

is expensive and can limit scalability.

`val set : t -> int -> unit`

`set a n`

sets the current value of the accumulator `a`

to `n`

.