Boost.mutex連續兩次加鎖會造成死鎖

 原文:https://blog.csdn.net/KnightOnHourse/article/details/80414863

#include<iostream>  
#include<iomanip>  
using namespace std;  
 
#include <boost/thread.hpp>    
#include <boost/bind.hpp>    
#include <boost/thread/mutex.hpp>    
using namespace boost;  
 
typedef boost::mutex CMutex;  
typedef boost::lock_guard<CMutex> CLockGuardMutex;  
typedef boost::thread_group CThreadGroup;  
 
 
void main()
{
	CMutex oMutex;
	cout << "First Lock......" << endl;
	oMutex.lock();
	cout << "Second Lock......" << endl;
	oMutex.lock();
	cout << "Unlock Once......" << endl;
	oMutex.unlock();
	cout << "Unlock Twice......" << endl;
	oMutex.unlock();
}

注意兩個以上互斥鎖可能會產生死鎖問題,即兩個鎖相互等待對方釋放,程序鎖死不動

1.一個線程中對同一個mutex連續兩次lock會導致程序卡死;

2.兩個線程對同一個mutex同時lock也會導致程序卡死(在欠驅手串口通信讀、寫線程中測試)。

 

參考:

C++11併發與多線程總結(二) --獨佔互斥鎖--mutex,lock_guardy與其他mutex    https://blog.csdn.net/Rice__/article/details/105046267

 

死鎖概述與總結  https://blog.csdn.net/snow_5288/article/details/72808852?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章