 atomic_signal_fence(memory_order_acq_rel);
forbids the compiler to reorder read and write commands around it.__memory_barrier()
intrinsics._ReadWriteBarrier()

In many programming languages different types of barriers can be combined with other operations (like load, store, atomic increment, atomic compare and swap), so no extra memory barrier is needed before or after it (or both).