【问题标题】:Does any C library implement C11 threads for GNU/Linux?是否有任何 C 库为 GNU/Linux 实现 C11 线程?
【发布时间】:2014-08-24 19:33:41
【问题描述】:

很多关于 C11 和 C11 线程的问题,但我在任何地方都没有看到明确的答案:

任何C 库是否实现了可在类 GNU/Linux 上使用的 C11 线程接口? 例如,提供“可选”<threads.h>thread support library 之类的thrd_create(),来自the C11 standard,靠近 p。 376.

理想情况下,我想为通用/通用/多架构(例如,GNU/Linux、x86_64 或便携式)找到一个通用的、开源的或免费的库。

一些更有用和相关的 SO 链接:

库的一些非入门选项:

对 POSIX 线程(许多不错的选择)、Windows、IDE 和 C++11(我知道 GNU libstdc++ 和 LLVM /Clang libc++提供C++11的std::thread,它使用-pthread)

谢谢!


(重新)编辑:问题重新打开,所以migrated content to answer 进行清理。

【问题讨论】:

  • @Grady - 谢谢;您的问题已经是上面的链接#4。 :) 根据经验,例如,glibc__STDC_NO_THREADS__ 设置为1,正如您在问题中所指出的那样。
  • 抱歉,我点击的次数不够。
  • 我不会太担心 6:1 的比例相当于工具购买问题(一个经过充分研究的工具购买问题)。
  • glibc 现在支持,包含在 2.28 中

标签: c multithreading c11


【解决方案1】:

musl 现在(截至 2014 年 9 月)实现 C11 线程!

根据this recent musl mailing list postthat list in Jul-Sep 2014 上的其他对话,似乎musl 库现在(截至2014-09-07)实现了C11 线程接口,尽管the comparison chart;在撰写本文时并未反映这一点。

由于重新打开此问题,我将此内容移至正确答案。

【讨论】:

  • 谢谢,我刚试过 musl-gcc figE_12.c 并能够用 <threads.h> 编译一些东西。我试图在 gcc 上,但不能。我正在使用 Debian 拉伸。 gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 它给了我fatal error: threads.h: No such file or directory 我尝试与-threads 链接但刚刚得到error: unrecognized command line option ‘-threads’; did you mean ‘-pthread’? 无论如何musi 工作。谢谢我投票给你。
【解决方案2】:

终于GNU LIBC 2.28 支持 C11 ISO 线程了。

我认为 Archlinux、Gentoo 和 Suse Tumbleweed 会很快支持它。今年晚些时候 Fedora 和 Ubuntu 以及 2019 年或更晚的其他产品。

【讨论】:

【解决方案3】:

https://github.com/jtsiomb/c11threads 是“POSIX 线程上的普通 C11 线程.h 实现”。包含在单个标题中。

【讨论】:

    【解决方案4】:

    嗯,看起来 GCC 4.9.0 实际上为 C11 标准提供了大量支持(至少自 2014 年 6 月左右修改了 Web 文档以来。

    来自https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Standards.html

    C 标准的第四个版本,称为 C11,发布于 2011 年作为 ISO/IEC 9899:2011。 GCC 基本上完全支持 此标准通过 -std=c11 或 -std=iso9899:2011 启用。 (而在 开发中,这个标准版本的草案被称为 C1X。)

    来自https://gcc.gnu.org/gcc-4.9/changes.html

    ISO C11 atomics(_Atomic 类型说明符和限定符以及 标头)现在受支持。 ISO C11 通用选择 现在支持(_Generic 关键字)。 ISO C11 线程本地存储 现在支持(_Thread_local,类似于 GNU C __thread)。 ISO C11 支持现在与 ISO C99 支持的完整性水平相似: 基本上完整的模数错误,扩展标识符(支持 使用 -fextended-identifiers 时的极端情况除外), 浮点问题(主要但不完全与可选相关 来自附件 F 和 G) 和可选附件 K 的 C99 功能 (边界检查接口)和 L(可分析性)。新的 C 扩展 __auto_type 在 GNU C 中提供了 C++11 auto 功能的一个子集。

    据此,很难说当踏板撞击金属时所有这一切的真正含义。将环境升级到最新的 GCC 4.9.0 版本和一些简单的驱动程序将确认它正在实施多少或多少。

    希望对你有帮助。

    【讨论】:

    • gcc 支持与 glibc 支持完全不同。
    • 对;我正在使用gcc-4.9.0glibc-2.19(相信当前稳定)。该组合将__STDC_NO_THREADS__ 报告为1,将lack of support 声明为“可选”线程“功能”,因此我正在寻找其他地方。 :) 对于 C 语言 特性和编译器特定的东西,gcc 支持(大部分)C11(例如,语法、语义、编译器特定的头文件、libgcc 的东西)。由于不同的原因,gcc 代码库捆绑了libstdc++,但glibc 没有 捆绑在gcc 中,所以 C library 诸如 <thread.h> 之类的东西是相当独立的。
    【解决方案5】:

    FreeBSD 自 FreeBSD 10.0 起提供threads.h 该程序需要与 libstdsthreads 链接。

    【讨论】:

      【解决方案6】:

      PDCLib(公共领域 C 标准库)包括对 threads.h 的 AFAICT 完全支持,它不是 pthread 的包装器。

      【讨论】:

        【解决方案7】:

        FreeBSD 似乎围绕着 posix 线程。你可以在这里找到它: FreeBSD c11 threads。我能够在 Cygwin 中使用它。到目前为止没有任何问题,但我还没有使用太多。

        【讨论】:

          猜你喜欢
          • 2015-05-07
          • 2020-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-07
          • 2020-12-01
          • 1970-01-01
          相关资源
          最近更新 更多