std库映射以提升库

时间:2011-12-22 15:15:24

标签: c++ visual-studio-2010 visual-c++ c++11 boost-thread

目前,我正在阅读包含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

3 个答案:

答案 0 :(得分:2)

您可以在MSVC 2010中使用std::movestd::unique_ptrstd::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::mutexboost::threadstd::mutexstd::thread的比较

答案 1 :(得分:2)

Boost线程库与标准线程库(基于boost库)非常相似;我认为Boost中的所有内容或多或少都相同,包括列表中的mutexthreadlock_guardthread::hardware_concurrency()thread::id

剩下的东西不是线程库的一部分;也许你的编译器确实有它们,即使它没有那个库。

boost::move的实现,但我不确定它们是否像std::move那样 - 如果编译器支持它,你应该使用它。

我认为没有boost::unique_ptr。你也许可以使用boost::scoped_ptr模仿它,使用std::swap(或者boost::move)来模拟移动。

正如您所说,boost::shared_ptrstd::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。