Back to questions
Junior — Middle
85
Можно ли назвать некоторые типы Lock Guard, реализованные в стандартной библиотеке C++?
Answer from AI
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(); // разблокируем
// ...
}