membar_sync(9)
Canonical URL: /membar_sync.9/
NAME
membar_enter,
membar_exit,
membar_producer,
membar_consumer,
membar_sync,
membar_enter_after_atomic,
membar_exit_before_atomic —
memory access barrier
operations
SYNOPSIS
#include
<sys/atomic.h>
void
membar_enter(void);
void
membar_exit(void);
void
membar_producer(void);
void
membar_consumer(void);
void
membar_sync(void);
void
membar_enter_after_atomic(void);
void
membar_exit_before_atomic(void);
DESCRIPTION
The membar set of functions provide an interface for issuing memory barrier access operations with respect to multiple processors in the system.
membar_enter()- Any store preceding
membar_enter() will reach global visibility before all loads and stores following it.membar_enter() is typically used in code that implements locking primitives to ensure that a lock protects its data. membar_exit()- All loads and stores preceding
membar_exit() will reach global visibility before any store that follows it.membar_exit() is typically used in code that implements locking primitives to ensure that a lock protects its data. membar_producer()- All stores preceding the memory barrier will reach global visibility before any stores after the memory barrier reach global visibility.
membar_consumer()- All loads preceding the memory barrier will complete before any loads after the memory barrier complete.
membar_sync()- All loads and stores preceding the memory barrier will complete and reach global visibility before any loads and stores after the memory barrier complete and reach global visibility.
membar_enter_after_atomic()- An atomic operation preceding
membar_enter_after_atomic() will reach global visibility before all loads and stores following it. The atomic operation is used to protect the start of a critical section. membar_exit_before_atomic()- All loads and stores preceding
membar_exit_before_atomic() will reach global visibility before atomic operation that follows it. The atomic operation is used to protect the end of a critical section.
The atomic operations that can be
used with
membar_enter_after_atomic()
and
membar_exit_before_atomic()
are the atomic_add, atomic_sub, atomic_inc, atomic_dec, and atomic_cas set
of functions. For other cases use membar_enter() or
membar_exit().
CONTEXT
membar_enter(),
membar_exit(),
membar_producer(),
membar_consumer(),
membar_sync(),
membar_enter_after_atomic(),
membar_exit_before_atomic() can all be called during
autoconf, from process context, or from interrupt context.
HISTORY
The membar functions first appeared in NetBSD 5.0 and OpenBSD 5.5.
Need conceptual guidance? Continue in the OpenBSD Handbook.