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

boost的线程库和c++11的线程序有何不同,第1张

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()。

全局变量和你传进线程的变量,类似。都是需要用线程锁来进行同步访问的。

全局变量用到线程里,以前是为了方便,不需要每次将变量传进函数里。因为CreateThread太麻烦,只能传进一个指针。现在用Boost就比较方便,可以传进多个参数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6735128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存