Я пытаюсь следовать Эта статья в разделе о безопасности публикаций. Мой случай ничем не отличается от тривиального примера в статье, но «опубликованные» данные представляют собой не одно значение, а несколько полей в struct
, Издатель запишет каждое поле по отдельности, поэтому, обернув каждую запись с магазином с memory_order_release
Я должен быть в порядке.
Потребитель сначала сверится с memory_order_acquire
что данные готовы. Затем я испытываю желание использовать memcpy
скопировать весь опубликованный struct
где-то еще (потому что это лучше вписывается в остальную часть уже существующего кода), но это не кажется безопасным, потому что я не могу указать модель памяти. Это просто паранойя или серьезная проблема?
Предложения, специфичные для amd64 / x86, приняты.
Семантика получения означает, что загрузки позже в программном порядке не будут переупорядочены до барьера, независимо от того, какую семантику вы запрашиваете при последующих загрузках. Поэтому я считаю, что использование memcpy для чтения структуры после барьера захвата является безопасным.
Других решений пока нет …