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

Класс mutex

Класс mutex представляет собой примитив синхронизации, который используется для защиты общих данных от одновременного доступа из нескольких потоков. Когда один поток захватывает мьютекс, другие потоки, пытающиеся захватить тот же мьютекс, блокируются до тех пор, пока первый поток не освободит его. Класс не принимает параметров и не копируется. Для использования класса необходимо подключить заголовочный файл <mutex>.

Основные методы класса: lock - блокирует мьютекс, try_lock - пытается заблокировать мьютекс без ожидания, unlock - освобождает мьютекс. После создания мьютекс находится в разблокированном состоянии.

Синтаксис

#include <mutex> std::mutex mtx; mtx.lock(); // критическая секция mtx.unlock();

Пример

Давайте рассмотрим простой пример защиты общей переменной от одновременного доступа из двух потоков:

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

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

2000

Пример

Давайте используем метод try_lock для неблокирующей попытки захвата мьютекса:

#include <iostream> #include <mutex> using namespace std; int main() { mutex mtx; if (mtx.try_lock()) { cout << "Lock acquired" << endl; mtx.unlock(); } else { cout << "Lock not acquired" << endl; } mtx.lock(); if (mtx.try_lock()) { cout << "Lock acquired again" << endl; mtx.unlock(); } else { cout << "Lock not acquired" << endl; } mtx.unlock(); return 0; }

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

"Lock acquired" "Lock not acquired"

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

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