Пространства имён
Варианты
Действия

std::lock_guard

Материал из cppreference.com
< cpp‎ | thread

 
 
Библиотека поддержки конкуренции
Ветви
(C++11)
(C++20)
(C++20)
Пространство имён this_thread
(C++11)
(C++11)
(C++11)
Атомарные типы
(C++11)
(C++20)
Инициализация атомарных типов
(C++11)(устарело в C++20)
(C++11)(устарело в C++20)
(C++11)(устарело в C++20)
Функции освобождения для атомарных операций
Функции освобождения для атомарных флагов
Упорядочивание памяти
Взаимное исключение
(C++11)
Общее управление блокировкой
lock_guard
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Условные переменные
(C++11)
Семафоры
Защёлки и бар��еры
(C++20)
(C++20)
Фьючерсы
(C++11)
(C++11)
(C++11)
(C++11)
 
std::lock_guard
 
Определено в заголовочном файле <mutex>
template< class Mutex >
class lock_guard;
(начиная с C++11)
Класс lock_guard является оберткой над мьютексом, которая обеспечивает удобный механизм (в RAII стиле) владения мьютексом внутри области видимости.
Оригинал:
The class lock_guard is a mutex wrapper that provides a convenient RAII стиле mechanism for owning a mutex for the duration of a scoped block.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Когда объект lock_guard создается, он пытается захватить мьютекс. Когда поток исполнения покидает область видимости, в которой был создан объект lock_guard, lock_guard разрушается и мьютекс освобождается.
Оригинал:
When a lock_guard object is created, it attempts to take ownership of the mutex it is given. When control leaves the scope in which the lock_guard object was created, the lock_guard is destructed and the mutex is released.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Класс
lock_guard не является копируемым. Передаваемый тип Mutex должен реализовывать концепт BasicLockable.
Оригинал:
The lock_guard class is non-copyable. The supplied Mutex type shall implement the BasicLockable concept.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Шаблонные параметры

Mutex Тип мьютекса для блокировки. Этот тип должен реализовывать концепцию BasicLockable

[править] Типы-члены

Тип члена Определение
mutex_type
Mutex
Оригинал:
Mutex
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Функции-члены

строит объект lock_guard, опционально блокирующий данный мьютекс
Оригинал:
constructs a lock_guard, optionally locking the given mutex
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
разрушает объект lock_guard, освобождает нижележащий мьютекс
Оригинал:
destructs the lock_guard object, unlocks the underlying mutex
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент) [править]
operator=
[удалено]
не является копируемым
(public функция-элемент) [править]

[править] Пример

#include <thread>
#include <mutex>
 
int g_i = 0;
std::mutex g_i_mutex;  // защищает g_i
 
void safe_increment()
{
    std::lock_guard<std::mutex> lock(g_i_mutex);
    ++g_i;
 
    // g_i_mutex автоматически освобождается, когда lock
    // покидает область видимости
}
 
int main()
{
    std::thread t1(safe_increment);
    std::thread t2(safe_increment);
 
    t1.join();
    t2.join();
}