Безопасно очистить переменную и вернуть ее последнее значение
#include <atomic.h>unsigned atomic_clr_value( volatile unsigned *loc,unsigned bits );
libc
Функция atomic_clr_value() представляет собой потокобезопасный способ выполнения операции (*loc) &= ~bits.
Функции atomic_*() гарантировано выполняются без вытеснения другим потоком. При модификации переменной совместно используемой в потоке и прерываниях, необходимо либо запрещать прерывания, либо использовать функции atomic_*().
Функции atomic_*() полезны для модификации переменной используемой в нескольких потоках (которые не обязательно принадлежат одному процессу) без необходимости в использовании мьютекса.
Производите атомарные операции только с объектами находящимися в памяти с нормальным мапированием. На определённых процессорах (например некоторые PPC) атомарные операции будут вызывать сбои, если объект находится в памяти без кэширования. |
Предыдущее значение находившееся в loc.
Безопасная очистка битов 0x10101010
в переменной flags:
#include <atomic.h>...volatile unsigned flags;unsigned previous;...previous = atomic_clr_value( &flags, 0x10101010 );
ЗОСРВ «Нейтрино»
atomic_add(), atomic_add_value(), atomic_clr(), atomic_set(), atomic_set_value(), atomic_sub(), atomic_sub_value(), atomic_toggle(), atomic_toggle_value()
Предыдущий раздел: Описание API системной библиотеки