Главная » Ядро Linux » Средства синхронизации в ядре – ЧАСТЬ 1

0

Таблица 9.1 . Полный список всех атомарных операций с целыми числами

Атомарная целочисленная операция                       Описание

ATOMIC_INIT(int i)

in t atomic_ read(atomic_t *y)

void atomic_set (atomic_t  *v,    in t i)

void atomic_add (in t  i,  atomic_t  *v) void atomic_sub(int  i,  atomic_t  *v) void  atomic_inc(atomic_t *v)

void atomic_dec(atomic_t  *v)

int atomic_sub_and_test(int  i,  atomic_t  *v) int atomic_add_negative(int i,  atomic_t  *v) in t   atomic_dec_and_test  (atomic_t  *v) in t  atomic_inc_and_test(atomic_t *v)

Объявление  и  инициализация в значение  i переменной типа atomic_ t

Атомарное  считывание  значения  целочисленной переменной v

Атомарно  установить  переменную v в значение  i Атомарно  прибавить  значение  i к переменной v Атомарно  вычесть значение  1 из переменной v Атомарно  прибавить  единицу  к переменной v Атомарно  вычесть  единицу  из переменной v Атомарно  вычесть значение  i из  переменной v

и возвратить  true , если  результат  равен  нулю, и  fals e в противном случае

Атомарно  прибавить  значение  i к переменной v и возвратить  true , если  результат  операции  меньше  нуля,  иначе  возвратить  fals e

Атомарно  вычесть  единицу  из  переменной v и возвратить  true , если  результат  операции  равен  нулю,  иначе  возвратить  fals e

Атомарно  прибавить  единицу  к переменной v и возвратить  true , если  результат операции  равен  нулю,  иначе  возвратить  fals e

Атомарность и порядок выполнения

От атомарных  операций  чтения  перейдем к различиям  между атомарностью и порядком выполнения.  Как уже рассказывалось, операции  чтения  одного  машинного слова всегда  выполняются атомарно.  Эти операции  никогда  не перекрываются операциями записи  того же машинного слова.  Иными  словами,  операция  чтения  данных всегда  возвращает  машинное  слово  в консистентном  состоянии: иногда  возвращается значение,  которое  было до записи,  а иногда—  то, которое  стало после записи,  но никогда  не возвращается значение,  которое  было во время  записи.  Например,  если  целочисленное значение  вначале было равно 42,  а потом  стало 365,  то операция  чтения  всегда  вернет  значение  42 или 365,  но никогда  не смешанное значение.  Это называетсяатомарностью.

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии