На современных быстрых многоядерных процессорах из-за буферов кэширования и записи возникают значительные издержки с атомарными инструкциями.
Таким образом, компиляторы не будут выдавать атомарные инструкции только потому, что вы добавили ключевое слово volatile
. Вам нужно прибегнуть к встроенной сборке или специфичным для компилятора расширениям (например, gcc atomic builtins ).
Я рекомендую использовать библиотеку. Самый простой способ - просто взять блокировку, когда вы хотите обновить переменную. Семафоры, вероятно, будут быстрее, если они соответствуют тому, что вы делаете. Кажется, GLib обеспечивает достаточно эффективную реализацию.