c++ - 为什么这个双重互斥锁不会造成死锁呢?

标签 c++ multithreading c++11 mutex deadlock

我在我的 centos 电脑上测试了 c++11 mutex。我尝试双重锁定此互斥锁以造成死锁。但是我运行之后一切正常,没有出现死锁。

#include <thread>
#include <mutex>
#include <iostream>
std::mutex m;
int main()
{
  m.lock();
  m.lock();
  std::cout<<"i am ok"<<std::endl;

  return 0;  
}

编译器是centos 3.10.0-327.36.3.el7.x86_64中的g++ 4.8.5:

[zzhao010@localhost shareLibPlay]$ ./3.out
i am ok

最佳答案

锁定一个已经被同一个线程锁定的 std::mutex未定义的行为,因此它可能有效,也可能失败,它可能会喝光你所有的啤酒然后吐在沙发上。没有保证。

关于c++ - 为什么这个双重互斥锁不会造成死锁呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919654/

相关文章:

multithreading - 什么时候要注意EJB中的多线程?

c - 读取全局标志不适用于 CUDA 中的 CPU>GPU 数据交换

c++ - QuantLib 1.5编译错误无法打开文件 'QuantLib-vc100-x64-mt.lib'

c++ - 是否有任何适用于 C++ Windows 开发人员的免费可移植(意思是 <100mb)IDE,其编译器能够进行代码提示并经过测试可与 Win32 API 一起使用?

Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

c++ - 全局const var声明一次,有可能吗?

c++ - 为什么不总是使用 std::forward?

指向模板化静态成员函数的指针的 C++11 vector

c++ - #include(ing) 文件,变量名现在类型错误 C++

c++ - 当我传递从 stringstream 构建的 char 指针时,ofstream open(...) 失败