Заборы в памяти: приобретать/загружать и выпустить/хранитьC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Заборы в памяти: приобретать/загружать и выпустить/хранить

Сообщение Anonymous »

Мое понимание std :: memory_order_acquire и std :: memory_order_release следующим образом:

означает, что нет доступа к памяти, которые появляются после . /> release < /strong> означает, что нет доступа к памяти, которые появляются до < /em> забор для выпуска может быть переупорядочен после ограждения. C ++ 11 < /code> Библиотека позволяет вам указать заборы памяти двумя способами: либо вы можете указать забор в качестве дополнительного аргумента в атомной операции, например: < /p>

Код: Выделить всё

x.load(std::memory_order_acquire);
< /code>

или вы можете использовать std :: memory_order_relaxed < /code> и указать забор отдельно, например: < /p>

x.load(std::memory_order_relaxed);
std::atomic_thread_fence(std::memory_order_acquire);
Чего я не понимаю, учитывая приведенные выше определения получения и выпуска, почему C ++ 11 специально связывает с помощью с load и release с store ? Да, я видел много примеров, которые показывают, как вы можете использовать приобретение/нагрузку с выпуском/хранилищем для синхронизации между потоками, но в целом кажется, что идея приобретения заборов (предотвращает переупорядочение памяти после оператора) и выброс заборов (предотвращайте переупорядочение памяти перед оператором), что, не так ли, что мне, не так, что, не так, как не так, как не так, как не так, как не так Скажи: < /p>

Код: Выделить всё

x.store(10, std::memory_order_acquire);
Я понимаю, что я могу выполнить вышеперечисленное, используя memore_order_relaxed , а затем отдельный оператор Atomic_thread_fence (memore_order_acquire) , но опять же, почему я не могу использовать хранилище с помощью Memory_order_acquire ? Некоторые хранилища, скажем, x = 10 , происходит до Некоторые другие операции выполняют, которые могут повлиять на другие потоки.

Подробнее здесь: https://stackoverflow.com/questions/368 ... ease-store
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»