5export module zxfoundation.sync.rcu.core;
6import zxfoundation.sync.rcu.types;
7import arch.s390x.cpu.sync;
12namespace zxfoundation::sync::rcu {
14 auto init()
noexcept ->
void;
17 auto read_lock()
noexcept ->
void;
20 auto read_unlock()
noexcept ->
void;
25 read_guard()
noexcept { read_lock(); }
26 ~read_guard()
noexcept { read_unlock(); }
27 read_guard(
const read_guard&) =
delete;
28 auto operator=(
const read_guard&) =
delete;
33 [[nodiscard]]
auto dereference(T*
const& ptr)
noexcept -> T* {
34 arch::s390x::cpu::sync::barrier();
36 __atomic_load(&ptr, &v,
37 static_cast<
int>(std::memory_order::acquire));
43 auto assign_pointer(T*& ptr, T* v)
noexcept ->
void {
44 __atomic_store(&ptr, &v,
45 static_cast<
int>(std::memory_order::release));
49 auto call_rcu(rcu_head* head,
void(*func)(rcu_head*)
noexcept)
noexcept ->
void;
52 auto synchronize_rcu()
noexcept ->
void;
55 auto barrier()
noexcept ->
void;
58 auto tick()
noexcept ->
void;