#include #include void refcount_init(struct refcount* rc) { atomic_store_explicit(&rc->count, 1, memory_order_relaxed); } void refcount_inc(struct refcount* rc) { atomic_fetch_add_explicit(&rc->count, 1, memory_order_relaxed); } bool refcount_dec(struct refcount* rc) { if (atomic_fetch_sub_explicit(&rc->count, 1, memory_order_release) != 1) return false; atomic_thread_fence(memory_order_acquire); return true; }