Здравствуйте, ·, Вы писали:
V>>Это всего-лишь артефакт дополнительного требования для сериализации доступа.
V>>Для слабых требований mfence не нужен.
V>>А сильные модели содержат куда как больше вариантов, чем один mfence из x86/x86_x64.
·>Какие модели?
Модели, скажем так, "степени когерентности памяти" абстрактной машины исполнения С++ программы.
Разные алгоритмы накладывают разные требования, эти требования были перечислены явно:
https://ru.cppreference.com/w/cpp/atomic/memory_order
Пример по ссылке:
memory_order_relaxed
Ослабленное(Relaxed) упорядочение: отсутствуют ограничения синхронизации и упорядочения, для данной операции требуется только атомарность.
...
Ослабленное упорядочение
Атомарные операции, отмеченные как std::memory_order_relaxed, не являются синхронизирующими операциями, они не упорядочивают память. Они гарантируют только атомарность и согласованность порядка модификации.
Теперь см. выделенное в моём процитированном.
·>Это просто один из вариантов реализации (особенность gcc). Второй — xchg.
Ты пока не понимаешь, о чём споришь.
Путаешь разные понятия.
V>>Курить, что есть атомарность.
·>Так кури:
·>Во втором случае используются специальные программные средства синхронизации, с помощью которых осуществляется блокировка разделяемого ресурса; после блокировки выполняется операция, которую требуется выполнить атомарно
Отож, второй случай.
Но ты спорил и продолжаешь спорить с первым.