目前,我正在阅读包含STD库和boost库使用情况的book。问题是Visual Studio 2010还不支持STD线程,我们必须依赖boost库。
因此,我正在寻找std线程库和boost库之间的一对一映射。是否有一些资源可供我参考?
例如,
std::mutex
std::thread
std::lock_guard
std::unique_ptr
std::move
std::thread::hardware_concurrency()
std::thread::id
std::this_thread
std::shared_ptr => boost::shared_ptr
答案 0 :(得分:2)
您可以在MSVC 2010中使用std::move
,std::unique_ptr
,std::shared_ptr
。
你知道你可以免费使用VC++11 Developer Preview吗?在那里你可以使用STL同步对象。看看Bartocz Milewski关于并发的webinars
您可以在以下问题Is it smart to replace boost::thread and boost::mutex with c++11 equivalents?
中查看boost::mutex
,boost::thread
与std::mutex
,std::thread
的比较
答案 1 :(得分:2)
Boost线程库与标准线程库(基于boost库)非常相似;我认为Boost中的所有内容或多或少都相同,包括列表中的mutex
,thread
,lock_guard
,thread::hardware_concurrency()
和thread::id
。
剩下的东西不是线程库的一部分;也许你的编译器确实有它们,即使它没有那个库。
有boost::move
的实现,但我不确定它们是否像std::move
那样 - 如果编译器支持它,你应该使用它。
我认为没有boost::unique_ptr
。你也许可以使用boost::scoped_ptr
模仿它,使用std::swap
(或者boost::move
)来模拟移动。
正如您所说,boost::shared_ptr
与std::shared_ptr
非常相似。
答案 2 :(得分:2)
你可以看看boost :: thread和关联类(只需看看boost.org)。
但不要忘记它们并非完全相同: boost :: thread已在C ++ 03中实现,而VS2010则提供了C ++ 11编译器。 这两种语言在“特性”方面是不同的,并且库可以比C ++ 03更有益于C ++ 11特性。
这使得std :: shared_ptr(和std :: unique_ptr)更喜欢boost :: shared_ptr和std :: auto:_ptr,其中C ++ 11的功能可用。
MS不支持std :: thread之类的原因(但同样适用于GCC的Windows版本 - MinGW)是std :: thread包含旧的C POSIX pthread功能,但是windows -internally-是不是POSIX等效系统,不支持某些原语(虽然它提供其他原语)。
MS从Win6(Vista)开始提供POSIX功能等效API,从而使映射工作成为可能和有效。 但是这使得std :: thread只能在win5 +(XP / 2& 3)仍然占主导地位的世界中仅用于win6 +。现在,boost :: thread是一个C ++ 03,它模仿了C ++ 11中的std :: thread,并且对于两个POSIX都可用(虽然在功能粒度方面不完全等同)(Unix / Linux)和Windows。