The
membar_ops family of functions provide memory access barrier operations necessary for synchronization in multiprocessor execution environments that have relaxed load and store order.
membar_enter()
Any store preceeding
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.