boost::thread

thread
thread库需要chrono库提供时间概念来执行睡眠、等该操作。因此必须先编译chrono库
一、
mutex(互斥量):可以在多线程环境里面防止多线程同时操作共享资源。
thread提供了6种互斥量:
null_mutex:无任何锁定功能的互斥量
mutex:独占式互斥量,最简单实用。
timed_mutex:独占式互斥量,提供超时锁定功能。
recursive_mutex:递归式互斥量,可以多次锁定,同时需要多次解锁。
recursive_timed_mutex:
shared_mutex:C++14,读写锁
这些互斥量除了功能不同外基本接口都比较接近。
mutex用法:
	boost::mutex mu;
	try
	{
		mu.lock();//用于线程阻塞等待直到获取互斥量的所有权
		//操作共享资源
		mu.unlock();
	}
	catch ()
	{
		mu.unlock();
	}

注:使用try catch 以防异常发生,未调用unlocks
timed_mutex用法:
boost::timed_mutex mu;//定时互斥量
auto flag = mu.try_lock_for(100_ms);//等待100ms
if(flag)//检查是否成功解锁互斥量
{
cout << "lock mutex"<<endl;
mu.unlock();
}
...//未能解锁,执行其他操作


二、lock_guard(RAII)
辅助锁定互斥量,构造时候锁定互斥量,解析时候自动解锁,不可拷贝
mutex mu;
lock_guard<mutex> g(mu);//第一种构造形式
//执行操作
timed_mutex mu;
if(mu.try_lock_for(100ms))
{
lock_guard<time_mutex> g(mu,adopt_lock);//第二种构造形式,认为线程之前已经锁定mutex,不会再执行锁定,但是会解锁。
//访问共享资源
}
unique_lock
注:工作机制和guard_lock相同,但是更加复杂,构造函数还可以接受其他的锁定选项,从而有不同的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值