关于网友提出的“ 一个牛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