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

hittyo hittyo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如下一个代码:

...
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递归锁。
...全文

相关推荐

boost库的线程例子和互斥锁

还有可取消的锁(`boost::mutex::scoped_lock`),当线程被异常终止时,会自动解锁,避免死锁。

zxk69809

C++多线程编程:互斥锁原理、类型与实战避坑指南

在多线程编程中,数据竞争是导致程序行为未定义、计算结果错误甚至崩溃的常见问题。其核心原理在于多个线程未经同步同时读写共享内存区域。为解决这一问题,互斥锁作为一种关键的同步原语应运而生,它通过互斥访问机制确保临界区代码的原子性执行。从技术价值看,互斥锁是构建线程安全、数据一致的高并发程序的基石。在C++工程实践中,标准库提供了多种互斥锁类型以适应不同场景,例如基础的std::mutex、可重入的std::recursive_mutex以及支持超时的std::timed_mutex。合理运用RAII包装器如st

weixin_33858336

Boost_thread库例程

**线程同步工具**:`boost::lock_guard`和`boost::unique_lock`是智能指针,用于自动管理互斥量的锁定和解锁,避免死锁。

放牛娃不吃草

boost::thread编程指南

"这篇文档是关于Boost库中的`boost::thread`模块的编程指南,旨在帮助开发者理解和使用这个强大的多线程工具。Boost是一个致力于推动C++标准库发展的组织,其线程库解决了C++标准

河马行空

C++ Boost Thread 编程

**互斥锁与条件变量**:提供了多种类型的锁(如互斥锁mutex、读写锁rw_lock)及条件变量,用于控制对共享资源的访问。3.

chenim2010
评论 12
收藏 已收藏
分享
返回顶部
hittyo
C++ 语言 65,214 成员 250,514 内容