Предоставляет ли освобождение памяти забор какие-либо гарантии относительно операций ПОСЛЕ ограды? - PullRequest
0 голосов
/ 30 марта 2019

https://preshing.com/images/two-cones-fences.png

в этой схеме показано, что если поток 2 войдет в секцию ниже ограничения памяти получения, все сохраненные значения выше границы памяти в потоке 1 будут видны.В моем понимании освобождение памяти забора не дает никаких гарантий относительно операций ПОСЛЕ забора.

Так что, если операция g_guard.store переупорядочена в начале выполнения потока?это означает, что поток 2 войдет в нижеследующий раздел ограничителя получения и прочитает значения, которые не заполнены, да?

это правильно или я что-то упустил?потому что в примере написано, что значения всегда будут такими же, что были записаны в потоке 1?помогите пожалуйста)

1 Ответ

0 голосов
/ 30 марта 2019

К счастью, я нашел ответ, даже тему об этом. Это объясняет, что порядок освобождения памяти для атомарной переменной по своей природе отличается от ограничения порядка освобождения памяти. вот ссылка https://preshing.com/20131125/acquire-and-release-fences-dont-work-the-way-youd-expect/

...