безопасность публикации, модели с расслабленной памятью и memcpy

Я пытаюсь следовать Эта статья в разделе о безопасности публикаций. Мой случай ничем не отличается от тривиального примера в статье, но «опубликованные» данные представляют собой не одно значение, а несколько полей в struct, Издатель запишет каждое поле по отдельности, поэтому, обернув каждую запись с магазином с memory_order_release Я должен быть в порядке.

Потребитель сначала сверится с memory_order_acquire что данные готовы. Затем я испытываю желание использовать memcpy скопировать весь опубликованный struct где-то еще (потому что это лучше вписывается в остальную часть уже существующего кода), но это не кажется безопасным, потому что я не могу указать модель памяти. Это просто паранойя или серьезная проблема?

Предложения, специфичные для amd64 / x86, приняты.

2

Решение

Семантика получения означает, что загрузки позже в программном порядке не будут переупорядочены до барьера, независимо от того, какую семантику вы запрашиваете при последующих загрузках. Поэтому я считаю, что использование memcpy для чтения структуры после барьера захвата является безопасным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]