package rowex
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=f9603b60308f70937f49cc2a32657549bdcb2db197ed5409ce9bd688187d994c
sha512=6cbfffa0c08b9bee5d8729656fb9ad6ea70eaf056ec01923b99eb47e113ddb7b51fa5c2b66b149116fb511f2506cb369ee73c3ca52cec2c372b8f0a7158c894f
doc/rowex/Rowex/index.html
Module RowexSource
Persistent implementation of Adaptive Radix Tree.
This module implements the core of ROWEX/P-ART from the given way to atomically load and store values. This implementation wants to ensure 2 things:
insertandlookupcan be executed in true parallelism- persistence is ensured by required syscalls (see
S.persist)
A quick note about atomic operations.
The "normal" model for our atomic operations is always the acquire/release model for our variables. This corresponds to what a CPU can normally consider if it complies with the TSO memory model (which is the case for an x86 processor). In the case of a CPU such as ARM, it is necessary to make this model explicit. However, there is an optimization where certain writes can be relaxed. It is difficult to know the impact of such an optimization: and to announce our ordering property as weak.
Thus, to simplify, we can consider that all loads have the acquire property and all stores have the release property.
type ('c, 'a) value = | Int8 : (atomic, int) value| LEInt : (atomic, int) value| LEInt16 : (atomic, int) value| LEInt31 : (atomic, int) value| LEInt64 : (atomic, int64) value| LEInt128 : (atomic, string) value| Addr_rd : (atomic, ro Addr.t) value| Addr_rdwr : (atomic, rdwr Addr.t) value| OCaml_string : (non_atomic, string) value| OCaml_string_length : (non_atomic, int) value
/