boost学习--thread

本文介绍了 C++ 中 7 种互斥量类型的基本用法,并详细解释了 mutex 类的使用方法。此外,还讨论了 thread 对象的创建、线程同步、线程中断等操作,以及 condition_variable 的使用方法。最后,提到了 future 和 promise 的概念及其用途。
摘要由CSDN通过智能技术生成

1、7种互斥量类型

mutex

try_mutex(为兼容以前版本)

timed_mutex

recursive_mutex

recursive_try_mutex(为兼容以前版本)

recursive_timed_mutex

shared_mutex

2、mutex基本用法:

mutex mu;

try

{

mu.lock();

......

mu.unlock();

}

catch(...)

{

mu.unlock();

}

使用RAII的lock_guard

mutex mu;

mutex::scoped_lock lock(mu);

.......

3、thread

thread对象不可copy

创建线程:要传一个无参的函数或函数对象,如不是无参,thread的构造支持直接传递所需参数,最多支持9个参数,是用拷贝方式,要传引用,要用ref库,同时初调用的对象在线程执行期一直存在。

如thread t(线程函数名,ref(引用参数),拷贝参数,....)

等待线程结束

t.join();

t.timed_join(posix_time::seconds(1));

与执行体分离

t.detach();

使用bind和function

bind将函数所需的参数绑定到一个函数对象,而function可存储bind表达式的结果

thread t(bind(函数名,参数,...));

function<void()> f = bind(函数名,参数...);

thread(f);

线程操作:

get_id()反回线程id对象,线程id有比较和流输出操作,可用标准容器来管理线程。

yield():放弃时间片

sleep():等待一小段时间

hardware_concurrency():得到硬件可并行的线程数量。

interrupt():中断线程,抛出thread_interrupted异常

线程执行到中断点的时候才能中断

thread定义了9个中断点:thread::join(),timed_join(),

condition_variable::wait(),timed_wait();

condition_variable_any::wait(), timed_wait();

thread::sleep();

this_thread::sleep(), interruption_point();

缺省线程允许中断的,也可以控制中断行为:

interruption_enabled():检测当前线程是否允许中断

interruption_requested():检测当前线程是否被要求中断;

disable_interruption是一个RAII对象,构造关闭中断,析构恢复,可用restore_interruption打开

thread_group类用于管理一组线程

条件变量:condition_variable,condition_variable_any,

使用:先锁定互斥量,然后wait()条件,其他线程处理条件变量要求的条件,用nofify_one和notify_all()通知

future:异步调用

boost::packaged_task<int> pt(boost::bind(fab, 10));//fab是一个函数,10是参数
boost::unique_future<int> uf =pt.get_future();
boost::thread(boost::move(pt));
uf.wait();
assert(uf.is_ready() && uf.has_value());
std::cout << uf.get() << std::endl;

可以使用多个future,对应有wait_for_any()和wait_for_all()

promise:包装一个值,适用于从函数参数返回值的函数。





et


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值