Гибкий захват 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.