Рекурсивный мьютекс в C++
Повторный захват тем же потоком разрешает
std::recursive_mutex, пока каждый
lock парен с unlock.
Вложенная функция снова возьмет тот же замок и увеличит общее значение:
#include <iostream>
#include <mutex>
#include <thread>
int main() {
int depth = 0;
std::recursive_mutex mx;
auto inner = [&]() {
mx.lock();
++depth;
mx.unlock();
};
std::thread worker([&]() {
mx.lock();
inner();
mx.unlock();
});
worker.join();
std::cout << depth << "\n";
return 0;
}
В одном std::thread дважды вызовите lock на std::recursive_mutex и столько же unlock. Выведите 1 после успешного прохода.