Question

I am trying to follow this article in the section about publication safety. My case is no different than the trivial example in the article, but the "published" data is not a single value, but several fields in a struct. The publisher will write each field singularly, so by wrapping up each write with a store with memory_order_release I should be ok.

The consumer will first check with memory_order_acquire that the data is ready. Then, I'm tempted to use a memcpy to copy the entire published struct somewhere else (because that fits better into the rest of the pre-existing code), but this doesn't seem to be safe because I cannot specify the memory model. Is this just paranoia or can it be a serious problem?

Suggestions specific to amd64/x86 accepted.

Was it helpful?

Solution

Acquire semantics mean that loads later in program order won't get re-ordered before the barrier, regardless of what semantics you ask for on the later loads. So I believe that using memcpy to read the structure after an acquire barrier is safe.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top