C++ 0x线程

问题描述:

随着STL中针对新的C++标准(C++ 0x)的线程工具的出现,是否最好更改使用POSIX线程或甚至Windows线程来使用STL线程的现有代码?C++ 0x线程

您可以随时对冲您的赌注......编写您自己的简单线程API,它足以满足您的应用程序需要完成的工作,并更改您的代码以仅针对您的线程API。然后,您可以使用Windows或Posix或STL或其他任何方式实现自定义线程API的内部功能,并且可以随时更改实现,而无需每次都触摸整个代码库。

通过这样做,你可以从STL实现开始,然后如果事实证明,例如, Windows有一个很难解决的问题,你可以在my_threading_api.cpp(在#ifdef WIN32里面)包含一个替代的Windows API实现,然后你就可以重新开始工作了。

+0

这就是我们所做的。我们已经为POSIX,Windows和我们使用的一些其他RTOS创建了自己的“操作系统抽象层”,并提供了不同的后端实现。我们还为信号量,互斥锁,定时器等等提供了类。这是一个非常有用的东西。 – 2010-06-04 15:59:39

+0

+1:非常有趣的解决方案! – Alerty 2010-06-04 16:00:49

很大程度上取决于您对可移植性的关注程度以及您利用您的本机API可能提供的功能的多少,标准库不提供这些功能。标准库线程与POSIX非常类似(至少是非正式的),我不能想象通过使用POSIX会获得多少收益(并且由于相似性,使用标准库的移植通常应该很容易)。

Windows线程是足够不同的,你更有可能遇到一些不平凡的东西,以便移植到使用标准库,甚至最好的移植可能不是微不足道的。

在C++ 0x函数库被普遍支持之前,不知道它会持续多长时间,所以答案很可能取决于如何绑定到特定的编译器。 您可能还想考虑一个在本机或C++ 0x库实现之上工作的框架或库,如Boost ThreadsIntel Threading Building Blocks,并让该库处理它是使用C++ 0x功能还是使用平台的详细信息蜜蜂。

除非您确实需要,否则请勿更改。我假设你现有的代码运行良好。

这取决于。我认为GCC实现了它,但MSVC没有,我不知道他们什么时候计划添加这种支持,但我可能会怀疑他们考虑它是一个低优先级功能)

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