atomic_toggle_value()

Безопасно переключить биты в переменной и вернуть предыдущее ее значение

Прототип:

#include <atomic.h>
unsigned atomic_toggle_value( volatile unsigned *loc,
unsigned bits );

Аргументы:

loc
Указатель на переменную в которой требуется переключить биты.
bits
Биты, которые требуется переключить.

Библиотека:

libc

Описание:

Функция atomic_toggle_value() представляет собой потокобезопасный способ выполнения операции (*loc) ^= bits.


Note: Функция atomic_toggle_value() может быть медленнее чем atomic_toggle().

Функции atomic_*() гарантировано выполняются без вытеснения другим потоком. При модификации переменной совместно используемой в потоке и прерываниях, необходимо либо запрещать прерывания, либо использовать функции atomic_*().

Функции atomic_*() полезны для модификации переменной используемой в нескольких потоках (которые не обязательно принадлежат одному процессу) без необходимости в использовании мьютекса.


Caution: Производите атомарные операции только с объектами находящимися в памяти с нормальным мапированием. На определённых процессорах (например некоторые PPC) атомарные операции будут вызывать сбои, если объект находится в памяти без кэширования.

Возвращаемое значение:

Предыдущее значение находившееся в loc.

Примеры:

Безопасное переключение битов 0xdeadbeef в переменной flags:

#include <atomic.h>
...
volatile unsigned flags;
unsigned previous;
...
previous = atomic_toggle_value( &flags, 0xdeadbeef );

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Да
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

atomic_add(), atomic_add_value(), atomic_clr(), atomic_clr_value(), atomic_set(), atomic_set_value(), atomic_sub(), atomic_sub_value(), atomic_toggle()




Предыдущий раздел: Описание API системной библиотеки