Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果由唯一_锁管理的互斥锁被破坏了怎么办? void Fn(){ std::mutex*mutex=新std::mutex; std::唯一锁(*互斥锁); 删除互斥; }_C++_C++11_Mutex - Fatal编程技术网

C++ 如果由唯一_锁管理的互斥锁被破坏了怎么办? void Fn(){ std::mutex*mutex=新std::mutex; std::唯一锁(*互斥锁); 删除互斥; }

C++ 如果由唯一_锁管理的互斥锁被破坏了怎么办? void Fn(){ std::mutex*mutex=新std::mutex; std::唯一锁(*互斥锁); 删除互斥; },c++,c++11,mutex,C++,C++11,Mutex,上面的代码段中是否有未定义的行为?是的,当然有未定义的行为。锁的析构函数将尝试调用mutex->unlock(),这将取消对无效指针的引用。甚至在锁的析构函数运行之前,您就已处于UB区域。§30.4.1.2.1[线程.mutex.class]/p5: 如果程序破坏互斥对象,则程序的行为是未定义的 由任何线程拥有,或者线程在拥有互斥锁时终止 反对 void Fn() { std::mutex* mutex = new std::mutex; std::unique_lock<std:

上面的代码段中是否有未定义的行为?

是的,当然有未定义的行为。锁的析构函数将尝试调用
mutex->unlock()
,这将取消对无效指针的引用。

甚至在锁的析构函数运行之前,您就已处于UB区域。§30.4.1.2.1[线程.mutex.class]/p5:

如果程序破坏
互斥对象,则程序的行为是未定义的
由任何线程拥有,或者线程在拥有
互斥锁时终止
反对

void Fn() {
  std::mutex* mutex = new std::mutex;
  std::unique_lock<std::mutex> lock(*mutex);
  delete mutex;
}