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);
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow