Fro*_*art 2 c++ multithreading gcc c++11 c++14
为什么以下代码导致g ++ 5.4.0中出现死锁?
#include <mutex>
int main()
{
std::mutex m;
m.lock();
m.lock();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,根据标准,此代码应导致异常:
30.4.1.2互斥体类型[thread.mutex.requirements.mutex]
6表达式m.lock()应格式正确,并具有以下语义:
[...]
12抛出:需要异常时的system_error(30.2.2).
13错误条件:
(13.1) - operation_not_permitted - 如果线程没有执行操作的权限.
(13.2) - resource_deadlock_would_occur - 如果实现检测到会发生死锁.
(13.3) - device_or_resource_busy - 如果互斥锁已被锁定且无法阻塞.
那怎么了?这是库中的错误吗?
您的代码具有未定义的行为,因为您违反了前提条件([thread.mutex.requirements.mutex]):
表达式
m.lock()
应格式良好并具有以下语义:要求:如果
m
是std::mutex
[...] 类型,则调用线程不拥有互斥锁.
归档时间: |
|
查看次数: |
115 次 |
最近记录: |