关于C11和C11线程,***有很多***问题,但我在任何地方都看不到明确的答案:
**是否 * 有任何 * C库实现了可在GNU/Linux上使用的C11线程接口?**例如,提供了“可选”的<threads.h>
和thread support library(如thrd_create()
)(来自第376页附近的the C11 standard)。
理想情况下,我希望找到一个通用的、开源的或免费的库,用于通用/通用/多体系结构(例如,GNU/Linux、x86_64或便携式)。
以下是一些更有帮助和相关的SO链接:
- 在
glibc
上的this one和this one; - this one,这是标准的
- 关于
clang
的this one; - this one关于一般的C11,this one关于Windows和其他平台;
- 关于 C++11 线程的更多信息,但我只对C11感兴趣。
一些非入门级库选项:
- 库;从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。
8条答案
按热度按时间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;在撰写本文时并没有反映这一点。
由于这个问题是重新打开的,我把这个内容移到一个适当的答案。
mqkwyuun2#
最后,GNU LIBC 2.28支持C11 ISO线程。
我认为Archlinux、Gentoo和Suse Tumbleweed会很快支持它。今年晚些时候Fedora和Ubuntu以及其他在2019年或更晚的版本。
pprl5pva3#
https://github.com/jtsiomb/c11threads是包含在单个头中的“POSIX线程上的Trivial C11 threads.h实现”。
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版本和一些简单的驱动程序将确认它被实现了多少。
希望能有所帮助。
ylamdve65#
FreeBSD自FreeBSD 10.0起提供
threads.h
。该程序需要与libstdsthreads链接。w46czmvw6#
PDCLib(Public Domain C标准库)包括对threads.h的AFAICT完全支持,并且它不是pthreads周围的 Package 器。
piok6c0g7#
FreeBSD似乎是围绕posix线程运行的。您可以在这里找到它:FreeBSD c11 threads。我可以在Cygwin中使用这个。到目前为止没有问题,但我还没有使用它那么多。
qv7cva1a8#
TinyCThread实现了标准C11的
threads.h
API,它封装了POSIX和Windows线程,很容易集成到您的项目中:它由一个.h
和一个.c
文件组成。