В программе, над которой я работаю, у меня много кода следующим образом:
pthread_mutex_lock( &frame->mutex );
frame->variable = variable;
pthread_mutex_unlock( &frame->mutex );
Это явно пустая трата циклов ЦП, если среднюю инструкцию можно просто заменить атомарным хранилищем. Я знаю, что gcc вполне способен на это, но я не смог найти много документации по таким простым потокобезопасным атомарным операциям. Как бы заменить этот набор кода на атомарную операцию?
(Я знаю, что теоретически простые хранилища должны быть атомарными, но я не хочу надеяться, что оптимизатор не испортит их атомарность в какой-то момент процесса.)
Разъяснение: мне не нужно, чтобы они были строго атомарными; эти переменные используются исключительно для синхронизации потоков. То есть поток B считывает значение, проверяет, правильно ли оно, а если нет, то спит. Таким образом, даже если поток A обновляет значение, а поток B не осознает его обновление, это не проблема, поскольку это просто означает, что поток B спит, когда ему это не нужно, и когда он просыпается, значение будет будь верным.