The release write is a memory barrier. It's not an SFENCE or another fancy instruction, but it is a memory barrier from the application writer's point of view.

The C++ code


    x.store(5, std::memory_order_relaxed)


has two effects on x86:

  1. generate a write to x that is a single instruction (e.g. mov $5, x)
  2. prevent preceding writes from being reordered by the compiler (they are implicitly ordered by the processor on x86).



On 03/18/2018 08:16 PM, Dan Eloff wrote:
You don't need memory barriers to implement an SPSC queue for x86. You can do a relaxed store to the queue followed by a release write to producer_idx. As long as consumer begins with an acquire load from producer_idx it is guaranteed to see all stores to the queue memory before producer_idx, according to the happens before ordering. There are no memory barriers on x86 for acquire/release semantics.

The release/acquire semantics have no meaning when used with different memory locations, but if used on producer_idx when synchronizing the consumer, and consumer_idx when synchronizing the producer, it should work.



On Thu, Feb 15, 2018 at 8:29 AM, Avi Kivity <[email protected] <mailto:[email protected]>> wrote:

    Ever see mfence (aka full memory barrier, or
    std::memory_order_seq_cst) taking the top row in a profile? Here's
    the complicated story of how we took it down:


    https://www.scylladb.com/2018/02/15/memory-barriers-seastar-linux/
    <https://www.scylladb.com/2018/02/15/memory-barriers-seastar-linux/>

-- You received this message because you are subscribed to the Google
    Groups "mechanical-sympathy" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to [email protected]
    <mailto:mechanical-sympathy%[email protected]>.
    For more options, visit https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>.


--
You received this message because you are subscribed to the Google Groups "mechanical-sympathy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to