TGViewer
Senior C++ Developer Senior C++ Developer @seniorcpp · 11.6K subscribers
Post #2494 3.5K
std::atomic_flag

std::atomic_flag является классом для реализации простой атомарной флаговой переменной. Он предоставляет механизм безопасной работы с флагом в многопоточной среде без необходимости использования блокировок.

std::atomic_flag имеет два основных метода: test_and_set() и clear():

Метод test_and_set() устанавливает флаг в "истину" и возвращает предыдущее значение флага. Если флаг уже был установлен, вызов test_and_set() вернет true, в противном случае он вернет false.
Метод clear() сбрасывает флаг в "ложь".

В этом примере создаются два потока workerThread1 и workerThread2, которые пытаются получить доступ к защищенному блоку кода. Флаг flag инициализируется значением true с помощью ATOMIC_FLAG_INIT. В цикле worker() каждый поток пытается вызвать test_and_set() для захвата флага. Если флаг уже установлен, поток ждет и повторно пытается его захватить. Когда флаг наконец захватывается, поток выполняет некоторую работу и вызывает clear() для освобождения флага.
More from @seniorcpp
  1. Oct 9, 2026init внутри if и switch Эта возможность C++17 мне полюбилась сразу же, как только я узнал…
  2. Oct 8, 2026Сортировка пузырьком Определите, сколько обменов сделает алгоритм пузырьковой сортировки п…
  3. Oct 6, 2026#вопросы_с_собеседований Что такое чисто виртуальный метод и абстрактный класс? Ответ: Чис…
  4. Oct 5, 2026#вопросы_с_собеседований В чем отличие vector от deque? Ответ: Здесь вспоминают о наличии…
  5. Oct 4, 2026Избавляемся от макросов В целом, разработчики стандарта стараются исключить препроцессор.…
  6. Oct 1, 2026malloc стал безопасен В предыдущих версиях использование низкоуровневых функций, унаследов…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →