相关疑难解决方法(0)

std :: lock仍然导致死锁

std :: lock用于防止死锁,对吗?但是在我的测试中,它仍然导致死锁.你能检查我的测试代码,看看我是否错误地使用了它?

std::mutex m1;
std::mutex m2;

void func1()
{
    std::unique_lock<std::mutex> lock1(m1, std::defer_lock);
    printf("func1 lock m1\n");
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::unique_lock<std::mutex> lock2(m2, std::defer_lock);
    printf("func1 lock m2\n");
    std::lock(m1, m2);
    printf("func1 std lock\n");

}

void func2()
{
    std::unique_lock<std::mutex> lock1(m2, std::defer_lock);
    printf("func2 lock m2\n");
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::unique_lock<std::mutex> lock2(m1, std::defer_lock);
    printf("func2 lock m1\n");
    std::lock(m2, m1);
    printf("func2 std lock\n");
}



int _tmain(int argc, _TCHAR* argv[])
{
    std::thread th1(func1);
    std::thread th2(func2);
    th1.join();
    th2.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:func1 lock m1 func2 lock m2 func2 lock m1 func1 lock m2 func2 std …

c++ deadlock locking c++11

4
推荐指数
1
解决办法
312
查看次数

标签 统计

c++ ×1

c++11 ×1

deadlock ×1

locking ×1