Rechercher
 

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 :

Les nouveautés introduites par C11

Les nouveautés introduites par C99 Les principales options de gcc


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.

Ajout d'une librairie de manipulation de threads

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;
}
Exemple de démarrage de deux threads/

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.

Les assertions statiques

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.

Les nouveautés introduites par C99 Les principales options de gcc