【问题标题】:C11 <thread.h> in GCC?GCC 中的 C11 <thread.h>?
【发布时间】:2012-01-14 01:29:39
【问题描述】:

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

【问题讨论】:

标签: c gcc c11


【解决方案1】:

用于线程的标准 C11 标头是 &lt;threads.h&gt;,而不是 &lt;thread.h&gt;。请参阅N1570 draft 的第 7.26 节。

大部分 C 标准库,例如包括 stdio,都没有包含在 gcc 发行版中。相反,gcc 依赖于操作系统提供的任何运行时库。这通常包括标头(如&lt;threads.h&gt;)和实现库的实际代码。

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

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

glibc adds support for C11 threads in version 2.28。 Ubuntu 18.04.1 LTS 系统目前仍然使用 glibc 2.27。同样,这仅适用于使用 GNU libc 的实现,而不适用于所有基于 gcc 的实现。 WorldSEnder 在评论中提到。

更新:Ubuntu 18.10(不是 LTS(长期支持)版本)具有支持 &lt;threads.h&gt; 的 glibc 2.28。此外,正如user2548688's answer 指出的那样,musl C library 支持&lt;threads.h&gt;。在 Ubuntu 上,您可以安装 musl-dev 软件包并使用 musl-gcc 命令。

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

【讨论】:

  • 大多数 Linux 系统使用 glibc,一些(如现代 Debian 及其衍生产品)使用 EGLIBC。其他一些系统使用其他替代品。
  • "modern debian uses EGLIBC" 澄清一下,Debian 及其衍生版本在 6 和 7 版(大约 2009-2015 年)中使用 eglibc,但在 debian 8 中切换到 glibc。截至 2020 年初(Debian 10) , Debian 继续使用 glibc。原始评论是在 2013 年发布的,所以当时当然是正确的
【解决方案2】:

可以在here找到更多信息。

... (Atomics - stdatomic.h - 是可选的,可能需要等待 将在 GCC 4.8 中实现的相关语言功能。我猜想 threads.h 中的可选线程接口和边界检查 附件 K 中的接口暂时不需要 glibc,尽管它们可以 可能会进入不同的库。

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

【讨论】:

  • 2014 年 8 月 27 日(2 年零 7 个月后):尚无在 GLIBC 中开发 threads.h 的计划。
  • 是的,不幸的是,我似乎错了(所以在可预见的未来,本机 windows 线程/posix 线程必须这样做)。出于某种原因,没有人推动支持可移植线程:/
  • glibc 2.28, August 2018(在我的回答中提到)。
【解决方案3】:

引用 GCC standards page 关于 C11 的内容:

GCC 对该标准的部分内容提供有限的不完全支持

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

4.64.7 的更改页面均未提及线程。


在 4.7 更改页面中提到了“线程”,但在 C11 上下文中似乎与它没有任何关系。此外,即将发布的 4.8 页面中没有提及 C11。

【讨论】:

  • 这并不完全正确:4.7 确实提到了线程。我不确定你发帖时是否有,但现在肯定有。
【解决方案4】:

musl libc 有 C11 http://www.musl-libc.org/ glibc 还不支持threads.h

【讨论】:

猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2023-04-07
相关资源
最近更新 更多