C ++ 0x线程

时间:2010-06-04 14:44:57

标签: c++ multithreading stl c++11

随着新C ++标准(C ++ 0x)的STL中线程设施的出现,更改使用POSIX线程甚至Windows线程使用STL线程的现有代码会更好吗?

5 个答案:

答案 0 :(得分:5)

您可以随时对冲您的赌注...编写您自己的简单线程API,它足以完成您的应用程序需要完成的任务,并且只需更改代码以定位您的线程API。然后,您可以使用Windows或Posix或STL等实现自定义线程API的内部,并在需要时更改实现,而无需每次都触及整个代码库。

通过这样做,您可以从STL实现开始,然后如果结果是Windows使用它有一个难以解决的问题,你可以在my_threading_api.cpp中包含一个备用的Windows-API实现(在#ifdef WIN32中)并且你将重新开始工作。

答案 1 :(得分:4)

很大程度上取决于您对可移植性的关注程度,以及您利用本机API可能提供的标准库所没有的功能。标准库线程与POSIX非常相似(至少是随便的)我不会想到你会因为使用POSIX而获得多少(并且由于相似性,移植使用标准库通常应该非常简单)。

Windows线程的不同之处在于,您更有可能遇到使用标准库移植到使用标准库非常重要的东西,即使最好移植也可能是非常重要的。

答案 2 :(得分:3)

除非你真的需要,否则不要改变。我假设您现有的代码运行良好。

答案 3 :(得分:2)

没有人知道在C ++ 0x库特性得到普遍支持之前需要多长时间,所以答案很可能取决于你可能希望与特定编译器绑定的方式。 您可能还需要考虑在本机或C ++ 0x库实现之上工作的框架或库,例如Boost ThreadsIntel Threading Building Blocks,并让该库处理它是否正在使用的详细信息C ++ 0x功能或平台API。

答案 4 :(得分:2)

取决于。

C ++ 0x线程尚未得到广泛支持(我认为GCC实现了它,但MSVC没有,我不知道他们何时计划添加该支持,但我可能怀疑他们认为它低优先级功能)

如果您的代码按原样运行,为什么要更改它? 对于新的C ++应用程序,并假设编译器支持,我会使用C ++ 0x线程,因为它们是标准的,并且它是比Win32或POSIX线程更好的API。