+<!--
+SPDX-FileCopyrightText: 2023 EfficiOS Inc.
+
+SPDX-License-Identifier: CC-BY-4.0
+-->
+
Userspace RCU Atomic Operations API
===================================
---
```c
-void uatomic_set(type *addr, type v)
+void uatomic_set(type *addr, type v);
```
Atomically write `v` into `addr`. By "atomically", we mean that no
```c
-type uatomic_read(type *addr)
+type uatomic_read(type *addr);
```
Atomically read `v` from `addr`. By "atomically", we mean that
```c
-type uatomic_cmpxchg(type *addr, type old, type new)
+type uatomic_cmpxchg(type *addr, type old, type new);
```
An atomic read-modify-write operation that performs this
sequence of operations atomically: check if `addr` contains `old`.
If true, then replace the content of `addr` by `new`. Return the
value previously contained by `addr`. This function implies a full
-memory barrier before and after the atomic operation.
+memory barrier before and after the atomic operation on success.
+On failure, no memory order is guaranteed.
```c
-type uatomic_xchg(type *addr, type new)
+type uatomic_xchg(type *addr, type new);
```
An atomic read-modify-write operation that performs this sequence
```c
-type uatomic_add_return(type *addr, type v)
-type uatomic_sub_return(type *addr, type v)
+type uatomic_add_return(type *addr, type v);
+type uatomic_sub_return(type *addr, type v);
```
An atomic read-modify-write operation that performs this
```c
-void uatomic_and(type *addr, type mask)
-void uatomic_or(type *addr, type mask)
+void uatomic_and(type *addr, type mask);
+void uatomic_or(type *addr, type mask);
```
Atomically write the result of bitwise "and"/"or" between the
```c
-void uatomic_add(type *addr, type v)
-void uatomic_sub(type *addr, type v)
+void uatomic_add(type *addr, type v);
+void uatomic_sub(type *addr, type v);
```
Atomically increment/decrement the content of `addr` by `v`.
```c
-void uatomic_inc(type *addr)
-void uatomic_dec(type *addr)
+void uatomic_inc(type *addr);
+void uatomic_dec(type *addr);
```
Atomically increment/decrement the content of `addr` by 1.