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