Accès rapide :
Ajout d'une librairie de manipulation de threads
Les assertions statiques
TODO : Document en cours de rédaction. La suite sera très prochainnement disponible.
Avec l'avénement des CPU multi-coeurs, l'introduction d'une librairie de manipulation de threads s'est imposée dans C11.
Cette librairie est accessible à partir de l'entête <threads.h>
.
Voici un petit exemple d'utilisation de cette librairie : deux threads supplémentaires sont démarrés et affichent des données sur la console.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <threads.h> bool mustExit = false; // La fonction sur laquelle vont démarrer nos deux threads int threadMain( void * data ) { const char * threadName = (const char *) data; while( ! mustExit ) { printf( "%s\n", threadName ); } return 0; } int main() { // On crée un premier thread. thrd_t thread1; void * threadName1 = (void *) "My first thread"; if ( thrd_create( &thread1, threadMain, threadName1 ) != thrd_success ) { fprintf( stderr, "Cannot create first thread\n" ); return EXIT_FAILURE; } // On crée un second thread. thrd_t thread2; void * threadName2 = (void *) "My second thread"; if ( thrd_create( &thread2, threadMain, threadName2 ) != thrd_success ) { fprintf( stderr, "Cannot create second thread\n" ); return EXIT_FAILURE; } // Appuyez sur la touche <ENTER> pour stopper le programme. char ch; scanf("%c"); // Tous les threads d'un même processus partagent la même zone de mémoire. // Les deux threads doivent donc voir cette variable et se suspendrent // quand cela sera nécessaire. mustExit = true; // On sort du programme. printf( "Main thread is terminated\n" ); return EXIT_SUCCESS; } |
Pour de plus amples informations sur l'utilisation des threads en C ISO 2011, je vous renvoi sur la section dédiée à ce sujet.
Une assertion statique est évaluée non pas à l'exécution, mais à la compilation. Cela permet de vérifier que certains prérequis sont bien présents afin de poursuivre la compilation. Voici un petit exemple.
#include <assert.h> #include <stdio.h> #include <stdlib.h> static_assert( sizeof(int) == 2, "16bits platform required" ); int main() { printf( "We are on a 16 bits platform\n" ); return EXIT_SUCCESS; }
Vous pouvez consulter la page dédiée aux assertions statiques pour de plus amples informations à ce sujet.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :