C++
Рекурсивный Мьютекс
Поиск…
станд :: recursive_mutex
Рекурсивный мьютекс позволяет тому же потоку рекурсивно блокировать ресурс - до неопределенного предела.
Для этого очень мало реальных оправданий. Некоторым сложным реализациям, возможно, потребуется вызвать перегруженную копию функции без освобождения блокировки.
std::atomic_int temp{0};
std::recursive_mutex _mutex;
//launch_deferred launches asynchronous tasks on the same thread id
auto future1 = std::async(
std::launch::deferred,
[&]()
{
std::cout << std::this_thread::get_id() << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(3));
std::unique_lock<std::recursive_mutex> lock( _mutex);
temp=0;
});
auto future2 = std::async(
std::launch::deferred,
[&]()
{
std::cout << std::this_thread::get_id() << std::endl;
while ( true )
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
std::unique_lock<std::recursive_mutex> lock( _mutex, std::try_to_lock);
if ( temp < INT_MAX )
temp++;
cout << temp << endl;
}
});
future1.get();
future2.get();
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow