您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 一个牛B的关于boost::mutex::scoped_lock死锁问题

一个牛B的关于boost::mutex::scoped_lock死锁问题

来源:网络整理     时间:2016/8/31 13:24:46     关键词:

关于网友提出的“ 一个牛B的关于boost::mutex::scoped_lock死锁问题”问题疑问,本网通过在网上对“ 一个牛B的关于boost::mutex::scoped_lock死锁问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 一个牛B的关于boost::mutex::scoped_lock死锁问题
描述:

如下一个代码:


...
void foo2() {
    boost::mutex::scoped_lock lLock(mtx);
    std::cout << "foo2" << std::endl;
    boost::mutex::scoped_lock lLock2(mtx);
    std::cout << "foo2222222" << std::endl;
}
int main(){
    boost::thread thread1(&foo2);
    thread1.join();
    return 0;
}
...

这个实例在正常情况下一定是输出 "foo2"后死锁,但小概率情况会抛出异常
what(): boost::lock_error
百思不得其解下查到这样一则解释:
Checking Locking:试图对本线程已经拥有的mutex加锁会导致boost::lock_error类型的异常抛出。
Unchecking Locking:试图对本线程已经拥有的mutex加锁会导致死锁,快速但不安全。
Unspecified Locking:试图对本线程已经拥有的mutex加锁会导致未定义行为。
而scoped_lock是否属于Unspecified Locking情况?还请牛人赐教!
实在不行只要抛弃使用了,退而使用recursive_mutex递归锁。
解决方案1:

mutex和lock是两个概念吧?
scope_lock照样可以使用recursive_mutex吧?


以上介绍了“ 一个牛B的关于boost::mutex::scoped_lock死锁问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3681706.html

相关图片

相关文章