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

Класс shared_lock

Класс shared_lock представляет собой RAII-обёртку для управления разделяемой блокировкой мьютекса. Он автоматически захватывает блокировку в конструкторе и освобождает её в деструкторе. В отличие от unique_lock, который даёт эксклюзивный доступ, shared_lock позволяет нескольким потокам одновременно удерживать блокировку в режиме чтения. Первым параметром конструктор принимает мьютекс, поддерживающий разделяемую блокировку (например, shared_mutex), а вторым - стратегию блокировки.

Синтаксис

#include <shared_mutex> std::shared_lock<Mutex> lock(mutex); std::shared_lock<Mutex> lock(mutex, std::defer_lock); std::shared_lock<Mutex> lock(mutex, std::try_to_lock); std::shared_lock<Mutex> lock(mutex, std::adopt_lock);

Пример

Давайте создадим shared_mutex и захватим его в режиме чтения с помощью shared_lock:

#include <iostream> #include <shared_mutex> using namespace std; int main() { shared_mutex mtx; shared_lock<shared_mutex> lock(mtx); cout << "Lock acquired in shared mode" << endl; return 0; }

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

"Lock acquired in shared mode"

Пример

Давайте используем метод owns_lock для проверки, удерживает ли объект блокировку:

#include <iostream> #include <shared_mutex> using namespace std; int main() { shared_mutex mtx; shared_lock<shared_mutex> lock(mtx); if (lock.owns_lock()) { cout << "Lock is held" << endl; } return 0; }

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

"Lock is held"

Пример

Давайте создадим shared_lock с отложенным захватом и вручную вызовем метод lock:

#include <iostream> #include <shared_mutex> using namespace std; int main() { shared_mutex mtx; shared_lock<shared_mutex> lock(mtx, defer_lock); cout << "Before lock: " << lock.owns_lock() << endl; lock.lock(); cout << "After lock: " << lock.owns_lock() << endl; return 0; }

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

"Before lock: 0" "After lock: 1"

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

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