boost学习--thread

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。   可从http://sourceforge.net/project/showfiles.php?group_id=7586下载安装boost库。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的库,如graph库。   Boost中比较有名气的有这么几个库:   Regex   正则表达式库   Spirit   LL parser framework,用C++代码直接表达EBNF   Graph   图组件和算法   Lambda   在调用的地方定义短小匿名的函数对象,很实用的functional功能   concept check   检查泛型编程中的concept   Mpl   用模板实现的元编程框架   Thread   可移植的C++多线程库   Python   把C++类和函数映射到Python之中   Pool   内存池管理   smart_ptr   5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:   Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb's Journal软件研发杂志》第7辑上的译文。   Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的工具。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧的手法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。   boost英文解释:推进   boost 在一些播放软件和音效中指增强,比如Bass Boost,低音增强。 提示: 这是boostpro定制安装更新版, 可以选择自己需要的库. 包括1.33到1.40所有版本. 如要最新可去http://www.boostpro.com/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值