是c++11线程平台独立的

Is c++11 thread platform independent?

本文关键字:独立 平台 线程 c++11      更新时间:2023-10-16

我搜索了很多问题和答案,但我真的没有弄清楚这个问题。昨天我在一个Visual c++项目中尝试了Windows上的c++ 11线程,它工作得很好。

这是否意味着我们可以在所有支持c++ 11编译器的平台上使用c++ 11线程?是否有任何理由不使用此线程而不是pthread或Windows线程(取决于平台)?

c++ 11线程库仍然使用来自操作系统的线程并依赖于它们,但是它以一种很好的方式进行了抽象,因此您几乎不会感受到任何差异。行为只是在细节上有所不同,你几乎不会注意到它们(只有在边缘情况和/或失败时)。可能仍然有一些平台不支持std::thread的所有内容(即使在2015年,例如在一些特定/外来的移动平台上)。

来自c++标准:

30线程支持库

此子句中描述的一些函数被指定为抛出system_error类型的异常(19.5.6)。这些例外应该是当检测到函数的任何错误条件或调用时引发对操作系统或其他底层API的访问将导致错误 分配存储失败应按中所述进行报告17.6.5.12 .

c++ 11的线程机制是跨平台的,就像标准c++的其他特性一样。根据我的理解,所有主要的编译器都打算尽其所能地支持c++标准,这意味着支持线程库。

这取决于编译器对它的支持程度。我想GCC/VS/Intel现在已经有很好的支持了,但是如果你的目标是一些外来的平台,那就不一定了。

STL的情况已经有一段时间了——它主要是可移植的,但它实际上取决于实现。仅仅因为它在标准中并不意味着它就会神奇地工作,即使它工作的机会比它不在标准中要高得多。

仍然会有其他实现- pthread, boost,等等。使用哪一个取决于你的个人喜好,你的需求等等。

是的,它与平台无关。它可以(通常是)作为pthread的包装器实现,所以基本上它可以是具有不同API的pthread。