Recherche…


Introduction

En C11, il existe une bibliothèque de threads standard, <threads.h> , mais aucun compilateur connu ne l'implémente encore. Ainsi, pour utiliser le multithreading en C, vous devez utiliser des implémentations spécifiques à la plate-forme telles que la bibliothèque de threads POSIX (souvent appelée pthreads) à l'aide de l'en-tête pthread.h .

Syntaxe

  • thrd_t // Type d'objet complet défini par l'implémentation identifiant un thread
  • int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Crée un fil
  • int thrd_equal (thrd_t thr0, thrd_t thr1); // Vérifie si les arguments font référence au même thread
  • thr_t thrd_current (void); // Retourne l'identifiant du thread qui l'appelle
  • int thrd_sleep (const struct timespec * duration, struct timespec * restant); // Suspendre l'exécution du thread d'appel pendant au moins un temps donné
  • annuler thrd_yield (vide); // Autorise l'exécution d'autres threads au lieu du thread qui l'appelle
  • _Noreturn void thrd_exit (int res); // Termine le thread le thread qui l'appelle
  • int thrd_detatch (thrd_t thr; // Détache un thread donné de l'environnement actuel
  • int thrd_join (thrd_t thr, int * res); // Bloque le thread actuel jusqu'à la fin du thread

Remarques

L'utilisation de threads peut introduire un comportement non défini supplémentaire tel qu'un http://www.riptutorial.com/c/example/2622/data-race . Pour un accès sans race aux variables partagées entre différents threads, C11 fournit la fonctionnalité de mtx_lock() ou le type de données (facultatif) http://www.riptutorial.com/c/topic/4924/atomics et les fonctions associées dans stdatomic.h .

C11 Threads exemple simple

#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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow