РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
780 of 815 menu

Метод unlock

Метод unlock класса mutex освобождает мьютекс, снимая блокировку, которая была установлена ранее с помощью метода lock или try_lock. Метод не принимает параметров и не возвращает значения. После вызова unlock мьютекс переходит в разблокированное состояние, и другие потоки могут захватить его для выполнения критической секции. Вызывать unlock должен только тот поток, который владеет блокировкой, иначе поведение программы не определено.

Синтаксис

mutex.unlock()

Пример

Давайте захватим мьютекс методом lock, изменим общую переменную, а затем освободим мьютекс методом unlock:

#include <iostream> #include <mutex> using namespace std; mutex mtx; int counter = 0; int main() { mtx.lock(); counter = 5; cout << counter << endl; mtx.unlock(); return 0; }

Результат выполнения кода:

5

Пример

Давайте рассмотрим использование unlock в двух потоках, которые поочерёдно захватывают и освобождают мьютекс:

#include <iostream> #include <mutex> #include <thread> using namespace std; mutex mtx; int res = 0; void increment() { mtx.lock(); res = res + 1; cout << res << endl; mtx.unlock(); } int main() { thread t1(increment); thread t2(increment); t1.join(); t2.join(); return 0; }

Результат выполнения кода:

1 2

Смотрите также

  • класс mutex,
    который представляет собой примитив синхронизации
  • метод lock,
    который захватывает мьютекс
  • метод try_lock,
    который пытается захватить мьютекс без блокировки
  • класс lock_guard,
    который автоматически управляет блокировкой мьютекса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить