vsync / atomic / atomicptr_markable.h
C implementation of AtomicMarkableReference in Java.
Precondition: Addresses must be 4-byte-aligned in order to use vatomicptr_markable_t.
Extends vatomicptr_t to vatomicptr_markable_t. The LSB of the address is utilized as a mark.
References:
Macros
| Macro | Description |
|---|---|
| V_ATOMICPTR_MARKABLE_IS_ALIGNED | Evaluates to true, if the given pointer _ptr_ is 4-byte-aligned. |
Macro V_ATOMICPTR_MARKABLE_IS_ALIGNED
V_ATOMICPTR_MARKABLE_IS_ALIGNED(_ptr_)
Evaluates to true, if the given pointer _ptr_ is 4-byte-aligned.
Functions
| Function | Description |
|---|---|
| vatomicptr_markable_cmpxchg | Compares and exchanges the address and mark value in a. |
| vatomicptr_markable_cmpxchg_acq | Compares and exchanges the address and mark value in a. |
| vatomicptr_markable_cmpxchg_rel | Compares and exchanges the address and mark value in a. |
| vatomicptr_markable_cmpxchg_rlx | Compares and exchanges the address and mark value in a. |
| vatomicptr_markable_attempt_mark | Attemps to update the mark in a. |
| vatomicptr_markable_attempt_mark_acq | Attemps to update the mark in a. |
| vatomicptr_markable_attempt_mark_rel | Attemps to update the mark in a. |
| vatomicptr_markable_attempt_mark_rlx | Attemps to update the mark in a. |
| vatomicptr_markable_set | Sets the address and mark of a to the given v and m. |
| vatomicptr_markable_set_rel | Sets the address and mark of a to the given v and m. |
| vatomicptr_markable_set_rlx | Sets the address and mark of a to the given v and m. |
| vatomicptr_markable_get | Returns the address value of a. |
| vatomicptr_markable_get_acq | Returns the address value of a. |
| vatomicptr_markable_get_rlx | Returns the address value of a. |
| vatomicptr_markable_get_pointer | Returns the address value of a. |
| vatomicptr_markable_get_pointer_acq | Returns the address value of a. |
| vatomicptr_markable_get_pointer_rlx | Returns the address value of a. |
| vatomicptr_markable_get_mark | Returns the mark value of a. |
| vatomicptr_markable_get_mark_acq | Returns the mark value of a. |
| vatomicptr_markable_get_mark_rlx | Returns the mark value of a. |
Function vatomicptr_markable_cmpxchg
static vbool_t vatomicptr_markable_cmpxchg(vatomicptr_markable_t *a, void *e_v, vbool_t e_m, void *v, vbool_t m)
Compares and exchanges the address and mark value in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.e_m: expected mark value.v: new address value to set.m: new mark value to set.
Returns: true address and mark were set.
Returns: false address and mark were not updated, because either the current address value in a != e_v, or the current mark value in a != e_m.
Function vatomicptr_markable_cmpxchg_acq
static vbool_t vatomicptr_markable_cmpxchg_acq(vatomicptr_markable_t *a, void *e_v, vbool_t e_m, void *v, vbool_t m)
Compares and exchanges the address and mark value in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.e_m: expected mark value.v: new address value to set.m: new mark value to set.
Returns: true address and mark were set.
Returns: false address and mark were not updated, because either the current address value in a != e_v, or the current mark value in a != e_m.
Function vatomicptr_markable_cmpxchg_rel
static vbool_t vatomicptr_markable_cmpxchg_rel(vatomicptr_markable_t *a, void *e_v, vbool_t e_m, void *v, vbool_t m)
Compares and exchanges the address and mark value in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.e_m: expected mark value.v: new address value to set.m: new mark value to set.
Returns: true address and mark were set.
Returns: false address and mark were not updated, because either the current address value in a != e_v, or the current mark value in a != e_m.
Function vatomicptr_markable_cmpxchg_rlx
static vbool_t vatomicptr_markable_cmpxchg_rlx(vatomicptr_markable_t *a, void *e_v, vbool_t e_m, void *v, vbool_t m)
Compares and exchanges the address and mark value in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.e_m: expected mark value.v: new address value to set.m: new mark value to set.
Returns: true address and mark were set.
Returns: false address and mark were not updated, because either the current address value in a != e_v, or the current mark value in a != e_m.
Function vatomicptr_markable_attempt_mark
static vbool_t vatomicptr_markable_attempt_mark(vatomicptr_markable_t *a, void *e_v, vbool_t m)
Attemps to update the mark in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.m: new mark value.
Returns: true mark was set to m.
Returns: false mark is not set, because current address value in a != e_v.
Function vatomicptr_markable_attempt_mark_acq
static vbool_t vatomicptr_markable_attempt_mark_acq(vatomicptr_markable_t *a, void *e_v, vbool_t m)
Attemps to update the mark in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.m: new mark value.
Returns: true mark was set to m.
Returns: false mark is not set, because current address value in a != e_v.
Function vatomicptr_markable_attempt_mark_rel
static vbool_t vatomicptr_markable_attempt_mark_rel(vatomicptr_markable_t *a, void *e_v, vbool_t m)
Attemps to update the mark in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.m: new mark value.
Returns: true mark was set to m.
Returns: false mark is not set, because current address value in a != e_v.
Function vatomicptr_markable_attempt_mark_rlx
static vbool_t vatomicptr_markable_attempt_mark_rlx(vatomicptr_markable_t *a, void *e_v, vbool_t m)
Attemps to update the mark in a.
Parameters:
a: address of vatomicptr_markable_t object.e_v: expected address value.m: new mark value.
Returns: true mark was set to m.
Returns: false mark is not set, because current address value in a != e_v.
Function vatomicptr_markable_set
static void vatomicptr_markable_set(vatomicptr_markable_t *a, void *v, vbool_t m)
Sets the address and mark of a to the given v and m.
Parameters:
a: address of vatomicptr_markable_t object.v: address value to set.m: mark value to set.
Function vatomicptr_markable_set_rel
static void vatomicptr_markable_set_rel(vatomicptr_markable_t *a, void *v, vbool_t m)
Sets the address and mark of a to the given v and m.
Parameters:
a: address of vatomicptr_markable_t object.v: address value to set.m: mark value to set.
Function vatomicptr_markable_set_rlx
static void vatomicptr_markable_set_rlx(vatomicptr_markable_t *a, void *v, vbool_t m)
Sets the address and mark of a to the given v and m.
Parameters:
a: address of vatomicptr_markable_t object.v: address value to set.m: mark value to set.
Function vatomicptr_markable_get
static void* vatomicptr_markable_get(vatomicptr_markable_t *a, vbool_t *out_m)
Returns the address value of a.
Parameters:
a: address of vatomicptr_markable_t object.out_m: output param of type vbool_t. The mark value ina.
Returns: void* address value in a.
Function vatomicptr_markable_get_acq
static void* vatomicptr_markable_get_acq(vatomicptr_markable_t *a, vbool_t *out_m)
Returns the address value of a.
Parameters:
a: address of vatomicptr_markable_t object.out_m: output param of type vbool_t. The mark value ina.
Returns: void* address value in a.
Function vatomicptr_markable_get_rlx
static void* vatomicptr_markable_get_rlx(vatomicptr_markable_t *a, vbool_t *out_m)
Returns the address value of a.
Parameters:
a: address of vatomicptr_markable_t object.out_m: output param of type vbool_t. The mark value ina.
Returns: void* address value in a.
Function vatomicptr_markable_get_pointer
static void* vatomicptr_markable_get_pointer(vatomicptr_markable_t *a)
Returns the address value of a.
Parameters:
a: address of vatomicptr_markable_t object.
Returns: void* stored address in a.
Function vatomicptr_markable_get_pointer_acq
static void* vatomicptr_markable_get_pointer_acq(vatomicptr_markable_t *a)
Returns the address value of a.
Parameters:
a: address of vatomicptr_markable_t object.
Returns: void* stored address in a.
Function vatomicptr_markable_get_pointer_rlx
static void* vatomicptr_markable_get_pointer_rlx(vatomicptr_markable_t *a)
Returns the address value of a.
Parameters:
a: address of vatomicptr_markable_t object.
Returns: void* stored address in a.
Function vatomicptr_markable_get_mark
static vbool_t vatomicptr_markable_get_mark(vatomicptr_markable_t *a)
Returns the mark value of a.
Parameters:
a: address of vatomicptr_markable_t object.
Returns: true if a is marked.
Returns: true if a is not marked.
Function vatomicptr_markable_get_mark_acq
static vbool_t vatomicptr_markable_get_mark_acq(vatomicptr_markable_t *a)
Returns the mark value of a.
Parameters:
a: address of vatomicptr_markable_t object.
Returns: true if a is marked.
Returns: true if a is not marked.
Function vatomicptr_markable_get_mark_rlx
static vbool_t vatomicptr_markable_get_mark_rlx(vatomicptr_markable_t *a)
Returns the mark value of a.
Parameters:
a: address of vatomicptr_markable_t object.
Returns: true if a is marked.
Returns: true if a is not marked.