Verwenden des neuesten GCC und Clang mit -std=c11.
Wird C11-Threading von GCC und Clang nicht unterstützt? Oder gibt es einen Hack (oder etwas zu installieren), um es zu bekommen? Ich verwende nur Ubuntu 14.04 mit den Paketen gcc und clang aus dem Ubuntu-Repo.
Die Anzahl der Compiler, die c11 und/oder threads.h vollständig unterstützen, ist negativ. 🙁
– Dies
5. April 2014 um 1:34 Uhr
C11-Threads werden, wenn sie schließlich unterstützt werden, von C Bibliothek und nicht der eigentliche Compiler. Mindestens zwei Leute sprechen darüber, diesen Sommer C11-Threads für glibc als GSoC-Projekt zu implementieren. In der Zwischenzeit finden Sie ggf pthread.h API verdächtig ähnlich, wenn auch mit viel längeren Namen für alles.
– zol
5. April 2014 um 1:40 Uhr
Ein Großteil der Standardisierung „segnet“ bestehende, weit verbreitete Erweiterungen, die als gute Idee angesehen werden, aber die Erfahrung zeigt, dass die Vorlaufzeit zwischen dem Erscheinen eines neuen Features im C-Standard und der tatsächlichen umfassenden Implementierung durch Compiler/Bibliotheken eher „10 Jahre bis nie“ als „bis zu 3 Jahre“.
– Emmett
5. April 2014 um 1:58 Uhr
@ Emmet /me schiebt dir wortlos die Whiskyflasche die Bar hinunter
– zol
5. April 2014 um 2:14 Uhr
Siehe auch Implementiert eine C-Bibliothek C11-Threads für GNU/Linux?
– Keith Thompson
8. Januar 2016 um 1:49 Uhr
Shafik Yaghmur
Das gcc dokumentieren C11-Status zeigt an, dass Threading nicht unterstützt wird, heißt es:
Wie das Dokument zeigt, ist dies nicht wirklich eine gcc oder clang Problem aber glibc Ausgabe. Wie Zack darauf hingewiesen hat, sieht es so aus möglicherweise wird bald daran gearbeitet dafür Unterstützung zu bekommen glibc aber das hilft dir jetzt nicht weiter. Sie können verwenden Dies in der Zwischenzeit.
9d0a979 Manuelle Dokumentation für threads.h hinzugefügt
0a07288 nptl: Testfälle für ISO C11-Threads hinzugefügt
c6dd669 nptl: Abilist-Symbole für C11-Threads hinzugefügt
78d4013 nptl: C11-Threads tss_*-Funktionen hinzufügen
918311a nptl: cnd_*-Funktionen für C11-Threads hinzugefügt
3c20a67 nptl: Call_once-Funktionen für C11-Threads hinzugefügt
18d59c1 nptl: C11-Threads mtx_*-Funktionen hinzufügen
ce7528f nptl: thrd_*-Funktionen für C11-Threads hinzufügen
Es wird in 2.28 enthalten sein.
Vielen Dank. Also unterstützen weder GCC noch Clang C11-Threading? Ich muss dann auf POSIX-Threads zurückgreifen 🙁
– Lukasart
5. April 2014 um 1:50 Uhr
@lucasart scheint der Fall zu sein
– Shafik Yaghmour
5. April 2014 um 1:55 Uhr
Ich wünschte, ich hätte das gestern gelesen. Der Bugzilla zum Einfädeln glibc ist noch offen (2+ Jahre). @lucasart: POSIX-Threads scheinen kaum eine Regression zu sein; nahezu identische Oberfläche, “tragbar”, und umgesetzt. 🙂 Tatsächlich kompilieren dagegen glibc 2.19 Berichte __STDC_NO_THREADS__ ist 1. Siehe auch diese SO für weitere Links. pthreads ist es (oder C++11 std::threadwas übrigens davon abhängt -pthread…).
In Ubuntu der verlinkte Header c11threads.h verursacht eine Reihe von Fehlern. Z.B PTHREAD_MUTEX_TIMED_NP nicht deklariert sein. Die Suche sagt, dass es im Lieferumfang enthalten sein sollte pthreads.haber es scheint nicht.
– Hallo Engel
6. Juli 2015 um 4:47 Uhr
@Hi-Angel Sie müssen entweder das Compiler-Flag -std=gnu11 anstelle von -std=c11 verwenden oder Sie müssen ein #define _GNU_SOURCE verwenden, bevor Sie diese c11threads.h-Datei einschließen.
– Nr
15. Januar 2016 um 10:29 Uhr
Funktioniert auf Debian 9.13 Sonntag, 28. Februar 2021.
– zkutch
28. Februar 2021 um 4:49 Uhr
Jeff Hammond
Während C11-Threads noch nicht implementiert wurden, wurden C++11-Threads implementiert und sie haben eine ähnliche Funktionalität. Natürlich kann C++11 eine inakzeptable Lösung sein, in diesem Fall sind die vorherigen Kommentare zu POSIX-Threads Ihre beste Hoffnung.
Threads wurden in die Mainline-Glibc gemergt und sind beispielsweise auf meinem Ubuntu 20.04 verfügbar. Leider scheine ich keine Handbuchseiten für die Funktion zu haben. Aber das funktioniert:
#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);
}
und teste es:
% 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
13708100cookie-checkC11 GCC threads.h nicht gefunden?yes
Die Anzahl der Compiler, die c11 und/oder threads.h vollständig unterstützen, ist negativ. 🙁
– Dies
5. April 2014 um 1:34 Uhr
C11-Threads werden, wenn sie schließlich unterstützt werden, von C Bibliothek und nicht der eigentliche Compiler. Mindestens zwei Leute sprechen darüber, diesen Sommer C11-Threads für glibc als GSoC-Projekt zu implementieren. In der Zwischenzeit finden Sie ggf
pthread.h
API verdächtig ähnlich, wenn auch mit viel längeren Namen für alles.– zol
5. April 2014 um 1:40 Uhr
Ein Großteil der Standardisierung „segnet“ bestehende, weit verbreitete Erweiterungen, die als gute Idee angesehen werden, aber die Erfahrung zeigt, dass die Vorlaufzeit zwischen dem Erscheinen eines neuen Features im C-Standard und der tatsächlichen umfassenden Implementierung durch Compiler/Bibliotheken eher „10 Jahre bis nie“ als „bis zu 3 Jahre“.
– Emmett
5. April 2014 um 1:58 Uhr
@ Emmet /me schiebt dir wortlos die Whiskyflasche die Bar hinunter
– zol
5. April 2014 um 2:14 Uhr
Siehe auch Implementiert eine C-Bibliothek C11-Threads für GNU/Linux?
– Keith Thompson
8. Januar 2016 um 1:49 Uhr