C++ 11 多线程 (condition_variable)(二)

本文深入探讨了C++11中的condition_variable,包括与condition_variable_any的区别、wait_for和wait_until的使用,以及wait过程中的数据竞争问题。通过示例代码解释了如何在多线程中有效利用condition_variable进行同步。
摘要由CSDN通过智能技术生成

[http://blog.csdn.net/taku2006/article/details/78678573]前一篇主要介绍了thread类,这篇主要介绍condition_variable

1. condtion_variable类

函数名 函数形式 备注
构造器 condition_variable(); 不支持拷贝,移动构造器
析构器 ~condition_variable(); 1.调用析构器之前,所有block在该object上的thread均应被notified.
2.否则将产生不可预知行为
wait -void wait (unique_lock<mutex>& lck);
-template <class Predicate> void wait (unique_lock<mutex>& lck, Predicate pred);
wait until notified
wait for template <class Rep, class Period>
cv_status wait_for (unique_lock<mutex>& lck, const chrono::duration<Rep,Period>& rel_time);

template <class Rep, class Period, class Predicate>
bool wait_for (unique_lock& lck, const chrono::duration<Rep,Period>& rel_time, Predicate pred);
wait for timeout or until notified
wait until template <class Clock, class Duration>
cv_status wait_until (unique_lock<mutex>& lck, const chrono::time_point<Clock,Duration>& abs_time);

template <class Clock, class Duration, class Predicate>
bool wait_until (unique_lock<mutex>& lck, const chrono::time_point<Clock,Duration>& abs_time,Predicate pred);
Wait until notified or time point
notify void notify_one() noexcept;
void notify_all() noexcept;
唤醒

condition_variable类还有个相似的类,condition_variable_any
两个类的区别在于:
-condition_variable类只能使用unique_lock<mutex> 来lock thread。
-condition_variable_any类可以使用任意lockable type


1. 代码实践
1.1 实例1

int Num = 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值