是否有任何C库为GNU/Linux实现了C11线程?

fivyi3re  于 2022-12-03  发布在  Linux
关注(0)|答案(8)|浏览(201)

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

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

理想情况下,我希望找到一个通用的、开源的或免费的库,用于通用/通用/多体系结构(例如,GNU/Linux、x86_64或便携式)。
以下是一些更有帮助和相关的SO链接:

一些非入门级库选项:

  • 库;从2012年开始有一个open bug;存在GSoC proposal,但似乎存在not accepted;
  • LLVM/Clang项目没有C库;
  • 库;--现在有了!见下面的编辑和answer
  • Newlib库支持线程(docs),但不使用pthread或C11线程;
  • uClibc不具有;
  • this comparison图表,这是可疑的(例如,我在musl源代码中没有看到C11线程本地存储支持的证据);
  • 一些关于BSD的各种帖子,
  • Pelles,显示为已关闭且仅限Windows。

我对POSIX线程(许多不错的选项)、Windows、IDE和C11都不感兴趣(我知道GNU libstdc++和LLVM/Clang libc++提供了C11的std::thread,它使用-pthread
谢谢你!
(重新)编辑:问题重新打开,因此要清理migrated content to answer

fnx2tebb

fnx2tebb1#

musl现在(自2014年9月起)实现C11线程!
根据this recent musl mailing list post和其他关于that list in Jul-Sep 2014的对话,看来musl库现在(截至2014-09-07)实现了C11线程接口,虽然the comparison chart;在撰写本文时并没有反映这一点。
由于这个问题是重新打开的,我把这个内容移到一个适当的答案。

mqkwyuun

mqkwyuun2#

最后,GNU LIBC 2.28支持C11 ISO线程。
我认为Archlinux、Gentoo和Suse Tumbleweed会很快支持它。今年晚些时候Fedora和Ubuntu以及其他在2019年或更晚的版本。

pprl5pva

pprl5pva3#

https://github.com/jtsiomb/c11threads是包含在单个头中的“POSIX线程上的Trivial C11 threads.h实现”。

qq24tv8q

qq24tv8q4#

嗯,看起来愚者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。愚者基本上完全支持此标准,通过-std=c11或-std= iso 9899:2011启用。(在开发过程中,此标准版本的草案称为C1 X。)
而从https://gcc.gnu.org/gcc-4.9/changes.html
现在支持ISO C11原子(_Atomic类型说明符、限定符和标头)。现在支持ISO C11通用选择(_Generic关键字)。现在支持ISO C11线程本地存储(_Thread_local,类似于GNU C __thread)。现在ISO C11支持的完整性级别与ISO C99支持的完整性级别相似:基本上完整的模错误、扩展标识符(除了使用-fextended-identifier的极端情况外,都支持)、浮点问题(主要但不完全与附录F和G中的可选C99特性相关)以及可选附录K(边界检查接口)和L(可分析性)。新的C extension __auto_type提供了GNU C中C++11 auto功能的子集。
从这一点上,很难判断当踏板碰到金属时,所有这些真正意味着什么。将环境升级到最新的愚者4. 9. 0版本和一些简单的驱动程序将确认它被实现了多少。
希望能有所帮助。

ylamdve6

ylamdve65#

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

w46czmvw

w46czmvw6#

PDCLib(Public Domain C标准库)包括对threads.h的AFAICT完全支持,并且它不是pthreads周围的 Package 器。

piok6c0g

piok6c0g7#

FreeBSD似乎是围绕posix线程运行的。您可以在这里找到它:FreeBSD c11 threads。我可以在Cygwin中使用这个。到目前为止没有问题,但我还没有使用它那么多。

qv7cva1a

qv7cva1a8#

TinyCThread实现了标准C11的threads.h API,它封装了POSIX和Windows线程,很容易集成到您的项目中:它由一个.h和一个.c文件组成。

相关问题