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

Метод unlock

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

Синтаксис

void unlock();

Пример

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

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

Результат выполнения кода (порядок может меняться):

"Thread 1 is working" "Thread 1 released the mutex" "Thread 2 is working" "Thread 2 released the mutex"

Пример

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

#include <iostream> #include <mutex> using namespace std; int main() { mutex mtx; unique_lock<mutex> lock(mtx); lock.unlock(); try { lock.unlock(); } catch (const system_error& e) { cout << "Error: " << e.what() << endl; } return 0; }

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

"Error: Operation not permitted"

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

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