【发布时间】:2017-05-06 23:35:23
【问题描述】:
为什么除非程序链接到 pthreads,否则创建 std::mutex 死锁实际上不会导致死锁?
下面链接pthreads库时会死锁,如果pthreads没有链接进去就不会死锁。在gcc和clang上测试过。
// clang++ main.cpp -std=c++14 -lpthread
#include <mutex>
int main() {
std::mutex mtx;
mtx.lock();
mtx.lock();
return 0;
}
我知道如果没有线程库,您实际上不需要互斥锁功能,但是编译器是否知道链接的库?是否可以在此基础上进行优化?
【问题讨论】:
-
fyi "如果锁由已经拥有互斥锁的线程调用,则行为未定义:..." 来源:en.cppreference.com/w/cpp/thread/mutex/lock
标签: c++ linker pthreads mutex compiler-optimization