C11: использование atomic_flag

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2561
ОС: Debian

C11: использование atomic_flag

Сообщение IMB »

Доброго дня!
В C11 был добавлен atomic_flag для которого заявлено lock-free https://en.cppreference.com/w/c/atomic/atomic_flag, его API предоставляет возможность установить его значение, при установлении true возвращается предыдущее значение, но есть ремарка
Unlike atomic_bool, atomic_flag does not provide load or store operations.
Как тогда его надо применять если нет никаких средств сравнения текущего значения с нужным? Можно конечно сравнивать значение возвращаемое https://en.cppreference.com/w/c/atomic/atomic_flag_test_and_set , но само значение уже изменено что совсем не нужно.
Подскажите в каких случаях и как его можно использовать?
Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5290
ОС: Gentoo

Re: C11: использование atomic_flag

Сообщение /dev/random »

IMB писал(а):
22.09.2022 09:11
Подскажите в каких случаях и как его можно использовать?
Для реализации других примитивов, например, мьютексов. В них atomic_flag может использоваться на начальном этапе, чтобы увеличить производительность при отсутствии конкурентов.

Код: Выделить всё

if (atomic_flag_test_and_set(&f)) {
  // занято, используем более тяжёлые средства для ожидания освобождения
} else {
  // было свободно, но мы заняли; выполняем операции, защищаемые мьютексом
  atomic_flag_clear(&f); // и освобождаем
}
Спасибо сказали:
Ответить