GCC中的C11 <thread.h>?

Der*_*unk 28 c gcc c11

我正在尝试使用编译一些C11代码thread.h,但我不能.我已经重新编译了GCC(现在运行4.6.2),我正在尝试编译gcc -std=c1x file.c -o file.我可以用g ++(使用thread库,即)来做到这一点,但我不能用C.还thread.h没有包含在GCC发行版中吗?

Kei*_*son 41

用于线程的标准C11标头<threads.h>不是<thread.h>.见N1570草案第7.26节.

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

对于大多数Linux系统(如果你愿意,还是GNU/Linux),库是GNU的glibc; 对于其他系统,它将是另一回事.

所以真正的问题可能是glibc,或者你正在使用的C库,都支持C11的线程功能.

glibc在版本2.28中添加了对C11线程的支持.Ubuntu 18.04.1 LTS系统目前仍使用glibc 2.27.同样,这仅适用于使用GNU libc的实现,而不适用于所有基于gcc的实现.WorldSEnder在评论中提到过.

更新:Ubuntu 18.10(不是LTS(长期支持)版本)有glibc 2.28,它支持<threads.h>.另外,正如user2548688的回答所指出的那样,musl C库支持<threads.h>.在Ubuntu上,您可以安装musl-dev软件包并使用该musl-gcc命令.

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


pru*_*nat 9

有关这方面的更多信息,请点击此处.

...(Atomics - stdatomic.h - 是可选的,可能需要等待在GCC 4.8中实现相关的语言功能.我猜测附件中的threads.h和bounds-checking接口中的可选线程接口K现在不想用于glibc,尽管它们可能会进入单独的库中.

我的猜测是我们不会在相当长的一段时间内看到这个,至少在标准的glibc和gcc中没有实现(源文章提供了一些见解).我的个人猜测就像一年,大概需要两年时间,直到它足够稳定以供生产使用.多数民众赞成2k14(断言(生存_2012)):P


Som*_*ude 6

引用GCC 标准页面关于C11:

海湾合作委员会对该标准的部分内容提供的支持有限

虽然我只有GCC 4.6.1,但我的系统上没有"thread.h"头文件.

4.64.7的更改页面都没有提到线程.


4.7更改页面中提到了"线程",但在C11上下文中似乎没有任何与它有关的内容.另外,在upcomming 4.8页面中没有提到C11 .

  • 这不是真的:4.7确实提到了线程.我不确定你发布时是否这样,但现在确实如此. (4认同)