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

Метод lock

Метод lock класса unique_lock блокирует связанный с объектом мьютекс. Если мьютекс уже заблокирован другим потоком, текущий поток будет ожидать освобождения мьютекса. Метод не принимает параметров и не возвращает значения. После успешного вызова метода объект unique_lock считается владеющим мьютексом.

Метод lock следует вызывать только в том случае, если объект unique_lock в данный момент не владеет мьютексом. В противном случае поведение не определено.

Синтаксис

lock.lock()

Пример

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

#include <iostream> #include <mutex> using namespace std; int main() { mutex mtx; unique_lock<mutex> lock(mtx, defer_lock); lock.lock(); cout << "Mutex is locked" << endl; lock.unlock(); return 0; }

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

"Mutex is locked"

Пример

Давайте рассмотрим пример с двумя потоками, которые по очереди блокируют один и тот же мьютекс с помощью метода lock:

#include <iostream> #include <mutex> #include <thread> using namespace std; mutex mtx; void print(int id) { unique_lock<mutex> lock(mtx, defer_lock); lock.lock(); cout << "Thread " << id << " locked mutex" << endl; lock.unlock(); } int main() { thread t1(print, 1); thread t2(print, 2); t1.join(); t2.join(); return 0; }

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

"Thread 1 locked mutex" "Thread 2 locked mutex"

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

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