以下代码
#include <threads.h>
给我这个错误:
fatal error: threads.h: No such file or directory
使用最新的GCC和Clang -std = c11。
GCC和Clang不支持C11线程吗?或者是否有一个黑客(或安装的东西)来获得它?我只是使用Ubuntu 14.04和Ubuntu repo中的gcc和clang包。
答案 0 :(得分:20)
gcc
文档C11 status表示它不支持线程,它说:
线程[可选] |图书馆问题(未实施)
正如文档所示,这不是gcc
或clang
问题,而是glibc
问题。正如Zack所指出的那样there may be work under way soon看起来像是glibc
,但现在却没有帮助你。
您可以在此期间使用this。
根据Bug 14092 - Support C11 threads,这将在glibc 2.8中修复:
通过以下方式实施上游:
9d0a979添加threads.h的手册文档 0a07288 nptl:添加ISO C11线程的测试用例
c6dd669 nptl:为C11螺纹添加abilist符号
78d4013 nptl:添加C11线程tss_ *函数
918311a nptl:添加C11线程cnd_ *函数
3c20a67 nptl:添加C11线程call_once函数
18d59c1 nptl:添加C11线程mtx_ *函数
ce7528f nptl:添加C11线程thrd_ * functions它将包含在2.28中。
答案 1 :(得分:3)
答案 2 :(得分:1)
虽然C11线程尚未实现,但C ++ 11线程已经实现,它们具有类似的功能。当然,C ++ 11可能是一个不可接受的解决方案,在这种情况下,关于POSIX线程的先前评论是你最好的希望。
答案 3 :(得分:0)
线程已合并到主线 Glibc 中,例如在我的 Ubuntu 20.04 上可用。不幸的是,我似乎没有该功能的任何手册页。但这有效:
#include <threads.h>
#include <stdio.h>
int hello_from_threading(void *arg) {
printf("Thread about to take a nap...\n");
thrd_sleep(&(struct timespec) { .tv_sec = 3 }, NULL);
printf("Woke up from 3 second slumber\n");
return 42;
}
int main(void) {
thrd_t thread;
thrd_create(&thread, hello_from_threading, NULL);
int res;
printf("A thread was started\n");
thrd_join(thread, &res);
printf("Thread ended, returning %d\n", res);
}
并进行测试:
% gcc threading.c -o threading -lpthread
% ./threading
A thread was started
Thread about to take a nap...
Woke up from 3 second slumber
Thread ended, returning 42