std::timed_mutex:: lock
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
timed_mutex::lock
|
||||
| Native handle | ||||
|
void
lock
(
)
;
|
(начиная с C++11) | |
Блокирует мьютекс. Если другой поток уже заблокировал мьютекс, вызов
lock
заблокирует выполнение до тех пор, пока блокировка не будет получена.
Если
lock
вызывается потоком, который уже владеет
mutex
, поведение не определено: например, программа
может
войти в состояние взаимной блокировки. Реализациям, способным обнаружить некорректное использование, рекомендуется выбрасывать
std::system_error
с условием ошибки
resource_deadlock_would_occur
вместо возникновения взаимной блокировки.
Предыдущие операции unlock() на том же мьютексе синхронизируются-с (как определено в std::memory_order ) этой операцией.
Содержание |
Исключения
Выбрасывает
std::system_error
при возникновении ошибок, включая ошибки базовой операционной системы, которые могут помешать
lock
выполнить свои спецификации. Мьютекс не блокируется в случае выбрасывания любого исключения.
Примечания
lock()
обычно не вызывается напрямую:
std::unique_lock
,
std::scoped_lock
и
std::lock_guard
используются для управления эксклюзивной блокировкой.
Пример
Этот пример показывает, как
lock
и
unlock
могут использоваться для защиты общих данных.
#include <chrono> #include <iostream> #include <mutex> #include <thread> int g_num = 0; // protected by g_num_mutex std::mutex g_num_mutex; void slow_increment(int id) { for (int i = 0; i < 3; ++i) { g_num_mutex.lock(); ++g_num; // note, that the mutex also syncronizes the output std::cout << "id: " << id << ", g_num: " << g_num << '\n'; g_num_mutex.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(234)); } } int main() { std::thread t1{slow_increment, 0}; std::thread t2{slow_increment, 1}; t1.join(); t2.join(); }
Возможный вывод:
id: 0, g_num: 1 id: 1, g_num: 2 id: 1, g_num: 3 id: 0, g_num: 4 id: 0, g_num: 5 id: 1, g_num: 6
Смотрите также
|
пытается заблокировать мьютекс, возвращает управление, если мьютекс недоступен
(публичная функция-член) |
|
|
пытается заблокировать мьютекс, возвращает управление, если мьютекс был
недоступен в течение указанного времени ожидания (публичная функция-член) |
|
|
пытается заблокировать мьютекс, возвращает управление, если мьютекс был
недоступен до достижения указанной точки времени (публичная функция-член) |
|
|
разблокирует мьютекс
(публичная функция-член) |
|
|
Документация C
для
mtx_lock
|
|