Visual C++ 2010支持C++11的线程库吗?

7

我正在使用Visual C++ 2010。它是否支持C++11线程库,以便我可以编译这个问题中的代码?

如果不支持,我该使用哪个库来支持此功能?

2个回答

10

Visual C++ 2010不提供C++11线程支持或原子库。

如果你想在Visual C++ 2010中使用该代码,你需要使用第三方实现这些库的库。其中一个选择是 just::thread;它不是免费的,但我已经拥有了一份并且很满意。

或者,您可以使用另一个跨平台线程库,如Boost.Thread或OpenThreads或一个本地Windows线程库。任何这些选项都可能需要对代码进行更改以便运行。

请注意,Visual C++ 11将支持这些库,并且它们已包含在Visual C++ 11 Beta中。


还有一个免费的类似替代品是Boost.Thread和Boost.Atomic(非官方)。 - GManNickG
@GMan:没错,Boost.Thread 最大的缺陷之一(据我所知)就是缺少类似于 std::async 的东西,而这个东西是自析构函数诞生以来最伟大的发明。 - James McNellis
是的,它确实有未来,所以它并不太遥远。 - GManNickG

1

VC++支持特殊的嵌入式语法OpenMP(http://msdn.microsoft.com/en-us/library/tt15eb9t(VS.80).aspx)-请注意,g++也支持它,因此您可以获得跨平台代码。


1
这个问题与OpenMP有什么关系? - CharlesB
1
@CharlesB - OpenMP将所有多线程所需的原语和并行执行的方式嵌入到语言级别中:原子操作、屏障、临界区以及最后的并行化。回答有什么问题吗?它涉及到VS++,回答了如何在没有第三方库的情况下提供多线程。 - Dewfy
1
好的,问题中发布的代码与C++0x的线程库相关,而OpenMP没有实现,因此我发表了评论。 - CharlesB
@CharlesB - 看看James McNellis的回答:“Visual C++ 2010不提供C++0x线程支持或原子库。”这意味着无法运行此代码。这导致我们寻找一些解决方法 - 要么使用第三方(James McNellis已经展示了这个解决方案),要么使用已经存在的功能。VC++提供了OpenMP。在两种方式中,代码都应该被重写。 - Dewfy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接