std::unique_lock, как и guard, владеет захватом, но позволяет вручную вызвать unlock и позже снова lock. Поток увеличит число под lock, затем.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpThUl 537 of 696 menu
◀ ▶

Гибкий захват std::unique_lock в C++

Гибкий захват std::unique_lock, как и guard, владеет захватом, но позволяет вручную вызвать unlock и позже снова lock.

Поток увеличит число под lock, затем отпустит мьютекс до выхода из функции:

#include <iostream> #include <mutex> #include <thread> int main() { int slot = 1; std::mutex mx; std::thread worker([&]() { std::unique_lock<std::mutex> lock(mx); ++slot; lock.unlock(); std::cout << "free\n"; }); worker.join(); std::cout << slot << "\n"; return 0; }

Под std::unique_lock измените int, затем вызовите unlock до конца лямбды. Выведите поле после join.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить