C Language
Multithreading
Suche…
Einführung
In C11 gibt es eine Standard-Thread-Bibliothek <threads.h>
, jedoch keinen bekannten Compiler, der sie noch implementiert. pthread.h
Multithreading in C zu verwenden, müssen Sie daher plattformspezifische Implementierungen verwenden, z. B. die POSIX-Threads-Bibliothek (häufig als pthreads bezeichnet), die pthread.h
Header pthread.h
.
Syntax
- thrd_t // Implementierungsdefinierter vollständiger Objekttyp, der einen Thread identifiziert
- int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Erstellt einen Thread
- int thrd_equal (thrd_t thr0, thrd_t thr1); // Prüfen Sie, ob sich Argumente auf denselben Thread beziehen
- thr_t thrd_current (void); // Gibt den Bezeichner des Threads zurück, der ihn aufruft
- int thrd_sleep (const struct Zeitangabe * Dauer, Struktur Zeitangabe * verbleibend); // Die Ausführung des Aufruf-Threads mindestens für eine bestimmte Zeit aussetzen
- void thrd_yield (void); // Erlaube die Ausführung anderer Threads anstelle des Threads, der ihn aufruft
- _Noreturn void thrd_exit (int res); // beendet den Thread den Thread, der ihn aufruft
- int thrd_detatch (thrd_t thr; // Entfernt einen bestimmten Thread aus der aktuellen Umgebung
- int thrd_join (thrd_t thr, int * res); // Blockiert den aktuellen Thread, bis der angegebene Thread beendet ist
Bemerkungen
Durch die Verwendung von Threads kann ein zusätzliches undefiniertes Verhalten eingeführt werden, z. B. eine http://www.riptutorial.com/c/example/2622/data-race . Für den Race-freien Zugriff auf Variablen, die von verschiedenen Threads gemeinsam genutzt werden, bietet C11 die Mutex-Funktion mtx_lock()
oder die (optional) http://www.riptutorial.com/c/topic/4924/atomics-Datentypen und zugehörigen Funktionen in stdatomic.h
.
C11 Threads einfaches Beispiel
#include <threads.h>
#include <stdio.h>
int run(void *arg)
{
printf("Hello world of C11 threads.");
return 0;
}
int main(int argc, const char *argv[])
{
thrd_t thread;
int result;
thrd_create(&thread, run, NULL);
thrd_join(&thread, &result);
printf("Thread return %d at the end\n", result);
}