Здравствуйте, ·, Вы писали:
_>>·>Действительно... одной инструкцией меньше, одной больше... Кака разница? В главном-то ты прав!
_>>Ох, ну что за детский сад. Ты реально не в курсе что такое mfence? Ну мне даже лень объяснять, так что поясню проще: https://godbolt.org/z/7zWFvr — с точки зрения вопросов атомарности это в точности тот же самых код с вполне корректным std::atomic, что и раньше, только переписанный чуть под другому. Дальше сам додумаешь? )))
·>А как это объяснишь? https://godbolt.org/z/LLNDkD
Это кривая реализация встроенной функции gcc __atomic_store_n для данной маргинальной платформы. Собственно тут (
https://github.com/michaeljclark/riscv-atomics) можно увидеть две реализации и та, что на сайте godbolt, использует именно кривой вариант через встроенную функцию gcc, а не через ассемблер. Нормальную реализацию можно увидеть например здесь
https://github.com/michaeljclark/riscv-atomics/blob/master/src/stdatomic_asm.h#L95. И подробное обсуждение всей этой кривизны можно увидеть здесь
https://github.com/michaeljclark/riscv-atomics/tree/master/results.