死锁的两种场景

1    假设有两个mutex(m1、m2),一个线程先锁住m1再锁住m2,另一个线程先锁住m2,再锁住m1,就有可能会出现死锁

        解决方式:

std::lock内部使用了死锁避免的算法,可以有效避免死锁。有两种用法:

std::lock(m1, m2)
std::lock_guard lock1(m1, std::adopt_lock)
std::lock_guard lock2(m2, std::adopt_lock)


std::unique_lock lock1(m1, std::defer_lock);
std::unique_lock lock2(m2, std::defer_lock);
std::lock(lock1, lock2)

2假设有个mutex m1 一个线程thread1锁m1,thread1以阻塞的方式启动thread2,thread2访问等待m1,此时死锁


版权声明:本文为weixin_42296687原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。