上篇博客介绍了boost库的mutex, 这次介绍timed_mutex的使用。
timed_mutex比mutex多增加了两个功能,尝试加锁,持续加锁。
try_lock_for
如果timed_mutex为上锁,则将它上锁,并返回1,如果已经上锁,则阻塞rel_time时间,并返回0. 代码如下:
#include "pch.h"
#include<boost/thread.hpp>
#include<iostream>
using namespace boost;
using namespace std;
//std::timed_mutex C++标准库已经把boost的timed_mutex融合了,使用boost的使用建议使用::说明
//超时返回的mutex
boost::timed_mutex g_TimedMutex;
void ThreadFun1()
{
g_TimedMutex.lock();
cout << "ThreadFun1先锁住8秒!" << endl;
this_thread::sleep(posix_time::seconds(8));
g_TimedMutex.unlock();
cout << "线程1解锁!" << endl;
}
void ThreadFun2()
{
//尝试锁住mutex,如果有其他线程锁住,最多阻塞3秒然后返回0
this_thread::sleep(posix_time::seconds(1));
cout << "线程2尝试加锁" << endl;
bool bLock = g_TimedMutex.try_lock_for(chrono::seconds(3));//第3秒时,线程1仍然锁着,所以线程2无法加锁,返回0
//bool bLock=g_TimedMutex.tr