boost的线程库和c++11的线程序有何不同

 我来答
DefInt
2016-12-27 · TA获得超过406个赞
知道小有建树答主
回答量:268
采纳率:83%
帮助的人:208万
展开全部

C++ 11的线程库是有一部分是从boost合并过来的,不过还是有一些区别:

  • Boost支持线程取消(cancellation), C++ 11不支持

  • C++ 11支持std::async,Boost不支持

  • Boost有支持多读单写锁定的boost::shared_mutex,C++11不支持(C++14才出现类似的东西std::shared_timed_mutex [N3891],C++17才正式定义了std::shared_mutex [N4508])

  • 两者关于超时的定义是不同的(但是由于Boost合并了Boost.Chrono,未来将不会有差异)

  • 有些类的命名是不同的,例如boost::unique_future和std::future

  • std::thread和boost::thread对传入参数的要求也是不一样的。Boost用的是boost::bind,要求参数是可复制的(copyable)。std::thread允许仅可转移(move-only)类型作为参数,例如std::unique_ptr。此外由于boost::bind的缘故,例如_1的参数占位符(placeholder)在绑定到表达式的时候用法也会不同

  • 如果不显式调用join()或detach()函数,boost::thread的析构函数和赋值操作符会自动调用detach()函数。相比之下,C++11的std::thread则是会调用std::terminate()。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式