Sobes.tech
Назад к вопросам
Junior — Middle
86

Можно ли назвать некоторые типы Lock Guard, реализованные в стандартной библиотеке C++?

Ответ от нейросети

sobes.tech AI

В стандартной библиотеке C++ реализованы несколько типов Lock Guard, которые обеспечивают удобное и безопасное управление мьютексами и другими примитивами синхронизации:

  • std::lock_guard — простой RAII-обертка для блокировки мьютекса на время жизни объекта. Автоматически блокирует мьютекс при создании и разблокирует при уничтожении.

  • std::unique_lock — более гибкий класс, который позволяет отложить блокировку, разблокировать и повторно заблокировать мьютекс, а также поддерживает передачу владения.

Пример использования std::lock_guard:

#include <mutex>

std::mutex mtx;

void thread_safe_function() {
    std::lock_guard<std::mutex> lock(mtx); // мьютекс заблокирован
    // критическая секция
} // мьютекс автоматически разблокируется при выходе из области видимости

std::unique_lock используется, когда нужна дополнительная гибкость:

#include <mutex>

std::mutex mtx;

void flexible_lock() {
    std::unique_lock<std::mutex> lock(mtx, std::defer_lock); // не блокируем сразу
    // ...
    lock.lock(); // блокируем мьютекс
    // критическая секция
    lock.unlock(); // разблокируем
    // ...
}