原文: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,并不会造成死锁,后lock的线程会进入等待状态,直到前一个进行unlock。但如果,在lock代码块中有串口通信(文件读写)等共享资源时,两个线程也会导致程序卡死(在欠驱手串口通信读、写线程中测试到,如果将串口通信函数放在lock代码块之外,则不会造成死锁)。
参考:
C++11并发与多线程总结(二) --独占互斥锁--mutex,lock_guardy与其他mutex https://blog.csdn.net/Rice__/article/details/105046267