C++11线程是否与平台无关?

4
我搜索了很多问题和答案,但我真的弄不懂这个问题。昨天我在Visual C++项目中尝试了在Windows上使用C++11 thread,并且它运行良好。
这是否意味着我们可以在拥有支持C++11的编译器的每个平台上使用C++11线程?使用此线程而不是pthread或Windows线程(取决于平台)是否有任何原因不要使用?

4
你期望它以哪种方式是不可靠的? - Kerrek SB
@KerrekSB 我不知道,我只是觉得可能有问题。我会编辑那部分以便更清楚。谢谢。 - ozgur
2
也许问题是,“编译器[未指定集合]是否正确实现了C++11线程?” - honza_p
2
对我来说,这个问题听起来像是“在我们被承诺能够做X的情况下,我们能做X吗”。也就是说,这有点毫无意义。你可以问一下你最喜欢的供应商的编译器在特定版本是否支持C++11,但你可能应该直接问你的供应商。 - Kerrek SB
3
因为线程是C++11规范的一部分,所以任何不支持线程的编译器都不能算作C++11编译器。 - Jeremy Friesner
显示剩余2条评论
4个回答

5
C++11线程库仍然使用操作系统中的线程,并依赖于它们,但是以良好的方式进行了抽象处理,因此您几乎不会注意到任何差异。只有在细节上有所不同,您才会略微注意到它们(仅在边缘情况和/或失败时)。仍然可能存在某些平台不支持std :: thread的所有功能(即使在2015年,例如某些特定/异国情调的移动平台)。
根据C ++标准:
30线程支持库
本条款中描述的某些函数被指定为引发system_error(19.5.6)类型的异常。如果检测到任何函数的错误条件或对操作系统或其他底层API的调用导致错误,从而阻止库函数满足其规格,则必须抛出此类异常。如17.6.5.12中所述,未能分配存储空间应报告。

2

C++11的线程机制与标准C++的其他功能一样,旨在实现跨平台。据我所知,所有主要编译器都打算尽其所能支持C++标准,这意味着支持线程库。


1
这真的取决于编译器对此的支持程度。我想GCC / VS / Intel现在应该有相当好的支持,但是如果您的目标平台比较奇特,情况可能并非如此。
STL已经是这种情况一段时间了 - 它大多数是可移植的,但它确实取决于实现。 仅仅因为它在标准中并不意味着它会自动工作,即使它在标准中的机会比不在标准中的要高得多。
仍然会有其他实现 - pthread,boost等。您使用哪个取决于您的个人偏好,您的要求等等。

2
我认为说“规范是可移植的”没有意义。更合理的说法应该是“规范已经在以下平台上实现了...”。 - Kerrek SB

1

是的,它是跨平台的。它可以作为pthread的包装器实现(通常也是这样实现的),因此基本上它可以是具有不同API的pthread。


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