网上很容易找到一个用boost::shared_mutex来作为读写锁的例子:
typedef boost::shared_mutex rwmutex; typedef boost::shared_lock<rwmutex> readLock; typedef boost::unique_lock<rwmutex> writeLock;
一直没有怀疑过这个做法,直到最近项目中出现一个死锁问题,查了很久才发现是上面这种写法造成的。
写测试代码还原死锁的情景如下:
#include <boost/thread/shared_mutex.hpp> #include <boost/thread/shared_lock_guard.hpp> #include <boost/thread.hpp> #include <iostream> #include <Windows.h> using namespace std; typedef boost::shared_mutex rwmutex; typedef boost::shared_lock<rwmutex> readLock; typedef boost::unique_lock<rwmutex> writeLock; rwmutex m_mutex; void func1() { writeLock lock1(m_mutex); cout << "fffffffffffffff" << endl; } int main() { { boost::thread tt(func1); readLock lock(m_mutex);
用boost共享锁实现读写锁造成死锁问题
最新推荐文章于 2021-10-29 14:39:24 发布
本文介绍了使用boost::shared_mutex实现读写锁时遇到的死锁问题。通过一个测试代码场景,揭示了主线程在持有读锁后尝试再次获取读锁,而此时有写锁在等待,从而导致死锁的现象。强调了在同一线程中不应多次使用shared_lock以避免此类问题。
摘要由CSDN通过智能技术生成