Я прочитал главу, и мне это не понравилось. Я все еще не понимаю, каковы различия между каждым порядком памяти. Это мои текущие предположения, которые я понял после прочтения гораздо более простых http://en.cppreference.com/w/cpp/atomic/memory_order
Ниже указано неверно, поэтому не пытайтесь учиться на нем
- memory_order_relaxed: не синхронизируется, но не игнорируется, когда заказ выполняется из другого режима в другой атомной var
- memory_order_consume: Синхронизация чтения этой атомной переменной, но она не синхронизирует расслабленные вары, написанные до этого. Однако, если поток использует var X при изменении Y (и освобождает его). Другие потоки, потребляющие Y, также увидят X? Я не знаю, означает ли это, что эта нить выталкивает изменения x (и, очевидно, y)
- memory_order_acquire: Синхронизация чтения этой атомной переменной И гарантирует, что расслабленные вары, написанные до этого, также синхронизируются. (означает ли это, что все атомные переменные во всех потоках синхронизируются?)
- memory_order_release: помещает атомный магазин в другие потоки (но только если они читают var с потреблением/приобретением)
- memory_order_acq_rel: для операций чтения/записи. Получает ли приобретение, поэтому вы не изменяете старое значение и не выпускаете изменения.
- memory_order_seq_cst: то же самое, что и получение релиза, за исключением того, что оно заставляет обновления отображаться в других потоках (если
a
сохранить с расслабленным в другом потоке.Я хранюb
с seq_cst. 3-й поток, читающийa
с relax увидит изменения вместе сb
и любой другой атомной переменной?).
Я думаю, что понял, но исправлю меня, если я ошибаюсь. Я не мог найти ничего, что объясняет это в удобном для чтения английском языке.