一个牛B的关于boost::mutex::scoped_lock死锁问题如下一个代码:...void foo2() {boost::mutex::scoped_loc
一个牛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递归锁。
[解决办法]
mutex和lock是两个概念吧?
scope_lock照样可以使用recursive_mutex吧?
