memory_order_release завершает запись обычных данных перед публикацией флага. Чтение с memory_order_acquire в другом потоке видит все записи.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpThAq 547 of 696 menu
◀ ▶

Захват и освобождение памяти в C++

Порядок memory_order_release завершает запись обычных данных перед публикацией флага.

Чтение с memory_order_acquire в другом потоке видит все записи, предшествующие release.

Сначала запишем полезную нагрузку, затем поднимем флаг с release; читатель увидит данные после acquire-load:

#include <atomic> #include <iostream> #include <thread> int main() { std::atomic<bool> ready{false}; int payload = 0; std::thread writer([&]() { payload = 42; ready.store(true, std::memory_order_release); }); while (!ready.load(std::memory_order_acquire)) { } writer.join(); std::cout << payload << "\n"; return 0; }

Запишите int, затем store(true, std::memory_order_release) в std::atomic<bool>. Другой поток ждет load(acquire) и читает int.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить