Я просматривал документацию по boost Atomic и наткнулся на следующий пример:
atomic<int> a(0);
thread1:
... /* A */
a.fetch_add(1, memory_order_release);
thread2:
int tmp = a.load(memory_order_acquire);
if (tmp == 1)
{
... /* B */
}
else
{
... /* C */
}
Я все еще немного запутался в отношении memory_order_release и memory_order_acquire. В документации они описаны как:
memory_order_release
Выполните операцию выпуска. Неформально говоря, предотвращает переупорядочение всех предыдущих операций с памятью после этого момента.
memory_order_acquire
Выполните операцию получения. Неформально говоря, предотвращает переупорядочивание последующих операций с памятью до этого момента.
Даже с этими примерами я все еще немного сбит с толку. Я был бы признателен, если бы кто-нибудь мог объяснить, что означают приведенные выше определения, а также как могут возникать конфликты между A и C?