成功的互斥锁锁定阻塞
Succesive mutex locks blocking
我出于好奇尝试了一些东西,但它似乎不起作用。在我做的相同函数中
std::mutex mtx1,mtx2;
mtx1.lock ();
mtx2.lock ();
mtx1.unlock ();
mtx2.unlock ();
然后我启动它几个线程。它出乎意料地(对我来说(陷入僵局。 我想了解原因。
(对谁感兴趣,为什么我想知道这样的事情,这个想法是创建一个互斥字典,并保护对这个互斥字典的访问( 谢谢
您在评论部分发布的代码与您问题中的代码不同。您的序列如下所示:
mtx1.lock(); // 1
mtx2.lock(); // 2
mtx1.unlock(); // 3
// 4
mtx1.lock(); // 5
mtx2.unlock(); // 6
mtx1.lock(); // 7
一个线程获取mtx2
并尝试锁定mtx1
(第 5 行(。另一个线程锁定mtx1
然后继续锁定mtx2
(第 2 行(。
您对两个互斥锁使用不同的锁定顺序。这是死锁的典型例子。
应始终以相同的顺序获取锁以避免死锁。解锁可以按任何顺序完成。
相关文章:
- cmake在我的项目中所需的所有静态库都不成功
- 如何找到锁定Linux futex的C++行
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- G锁定铸造到基础上会释放模拟行为
- 如何让LLDB在成功时退出,在失败时等待
- 如何检查线程是否锁定
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 我应该在锁定TBitmap画布后解锁它吗
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 为什么 std::绑定错误参数可以成功?
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 如何检查cURL是否成功登录?c ++
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 成功的互斥锁锁定阻塞
- 在设计良好的代码中,您应该期望锁定weak_ptr始终成功