C11<;螺纹h>;在海湾合作委员会?

C11<;螺纹h>;在海湾合作委员会?,c,gcc,c11,C,Gcc,C11,我正在尝试使用thread.h编译一些C11代码,但我不能。我已经重新编译了GCC(现在运行4.6.2),并尝试使用GCC-std=c1x file.c-o文件进行编译。我可以在g++(即使用thread库)中实现这一点,但在C中实现不了。是否thread.h尚未包含在GCC发行版中?引用GCC中关于C11的内容: GCC对本标准各部分的支持有限且不完整 虽然我只有GCC4.6.1,但我的系统中没有“thread.h”头文件 既不更改页面,也不提及线程 4.7更改页面中提到了“线程”,但在C1

我正在尝试使用
thread.h
编译一些C11代码,但我不能。我已经重新编译了GCC(现在运行4.6.2),并尝试使用
GCC-std=c1x file.c-o文件进行编译。我可以在g++(即使用
thread
库)中实现这一点,但在C中实现不了。是否
thread.h
尚未包含在GCC发行版中?

引用GCC中关于C11的内容:

GCC对本标准各部分的支持有限且不完整

虽然我只有GCC4.6.1,但我的系统中没有“thread.h”头文件

既不更改页面,也不提及线程



4.7更改页面中提到了“线程”,但在C11上下文中似乎与之无关。此外,在提交页面中未提及C11。线程的标准C11标题是
,而不是
。见本手册第7.26节

大多数C标准库(例如,包括stdio)不包含在gcc发行版中。相反,gcc依赖于操作系统提供的任何运行时库。这通常包括头(如
)和实现库的实际代码

对于大多数Linux系统(或GNU/Linux,如果您愿意),库是GNU的glibc;对于其他系统来说,这将是另一回事

所以真正的问题可能是glibc或您正在使用的任何C库何时支持C11的线程特性

。Ubuntu18.04.1LTS系统目前仍然使用Glibc2.27。同样,这只适用于使用GNULIBC的实现,而不适用于所有基于gcc的实现。WorldSEnder在评论中提到

更新:Ubuntu18.10(不是LTS(长期支持)版本)有Glibc2.28,它支持
。此外,正如所指出的,支持
。在Ubuntu上,您可以安装
musldev
包并使用
muslgcc
命令


(请注意,库的一些部分,即与编译器关系最密切的部分,是由gcc本身提供的。线程库可能不是其中之一,但肯定需要一些编译器支持。)

可以找到有关这方面的更多信息

。。。 (Atomics-stdatomic.h是可选的,可能需要等待 GCC4.8中要实现的相关语言特性 threads.h和bounds checking中的可选线程接口 目前,glibc不需要附件K中的接口,尽管它们可以 可能在单独的库中进行

我的猜测是,在相当长的一段时间内,我们不会看到这种实现,至少不会在标准的glibc和gcc中实现(来源文章提供了一些见解)。我个人的猜测是大约一年,可能需要大约2年的时间,直到它稳定到足以用于生产。这是2k14(断言(survival_2012)):P

musl libc具有C11


glibc不支持线程。h支持还不完全正确:4.7确实提到了线程。我不确定你发布时它是否提到了线程,但现在它肯定提到了。大多数Linux系统使用glibc,一些(如现代Debian及其衍生物)使用EGLIBC。一些其他系统使用其他替代品。“现代Debian使用EGLIBC”为了澄清,Debian及其衍生产品在第6版和第7版(约2009-2015年)中使用了eglibc,但在Debian 8中改用了glibc。截至2020年初(Debian 10),Debian继续使用glibc。最初的评论发布于2013年,因此在2014年8月27日(2年零7个月后)时是正确的:目前还没有在GLIBC中开发
threads.h
的计划。是的,看来我错得很不幸(因此本机windows线程/posix线程必须为可预见的未来做)。出于某种原因,没有人在推动支持可移植线程:/(在我的回答中提到)。(在我的回答中提到)。对于任何相对较新版本的gcc,您可以使用
-std=c11
而不是
-std=c1x