多线程学习笔记6

6 篇文章 7 订阅
6 篇文章 0 订阅
std::shared_future

这个对象的get()可以调用多次

int run1(  ){
	cout<<"thread_id : "<<std::this_thread::get_id()<<endl;
	for(int i=1;i<=1e2;i++){
		cout<<1;
	}
	std::chrono::seconds dura(2);//等待5秒
	std::this_thread::sleep_for(dura);//休息dura秒
	return 666;
}

int main(){
	cout<<"main_thread_id : "<<std::this_thread::get_id()<<endl;
	std::future<int> res = std::async(std::launch::deferred,ref(run1) );//流程不会卡在这里
	cout<<"continue...!"<<endl;

	//std::shared_future<int> res2(res.share());
	std::shared_future<int> res2( std::move(res) );//这两种方式执行后,res对象就为空了
	
	cout<<"I ...";
	return 0;
}
valid()

valid函数:检查共享状态的有效性,返回当前的future对象是否与共享状态关联。一旦调用了std::future::get()函数,再调用此函数将返回false。

std::atomic

原子操作 : 不需要用互斥量加锁的多线程并发编程方式 , 即在多线程中不会被打断的程序执行片段

原子操作一般针对的是一个变量 , 而不是一个代码段

std::atomic来代表原子操作 , std::atomic是个类模板,这个东西是用来封装某个

std::atomic<int> cnt=0;
cnt++;
cnt--;
//一般原子操作,针对++,--,+=,-=,&=,|=,^=是支持的,其他的可能不支持
std::recursive_mutex

递归的独占互斥量 : 允许同一个线程,同一个互斥量可以被锁多次

std::timed_mutex

带超时功能的独占互斥量

try_lock_for() : 等待一段时间(时间段) , 如果拿到锁了 , 或者超过等待时间没拿到锁 , 线程流程就走下来

std::chrono::seconds timeout(1s);
if(mymutex.try_lock_for(timeout)){
    dui.push(i);
    mymutex.unlock();//还是要记得解锁
}else{
    //没拿到锁头
}

try_lock_unti() : 等待的是一个时间点 , 在未来的时间没到拿到了锁 , 那么就走下来 , 如果时间到了 , 没拿到锁 , 也走下来

std::chrono::seconds timeout(1s);
if(mymutex.try_lock_until(chrono::steady_clock::now()+timeout)){
    dui.push(i);
    mymutex.unlock();
}else{
    //没拿到锁头
}
std::recursive_timed_mutex

带超时功能的递归独占互斥量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值