Tp 2: création de threads sous linux - systèmes d’exploita -

Université de Bouira – Département d'Informatique – Année universitaire 2017-2018

Systèmes d'exploitation des ordinateurs – 23ème année

TP 2 : Création de threads sous Linux

Exercice 1

Problème des accès concurrents

Écrire un programme qui initialise une variable entière globale valueglobale à 1 et crée deux threads, tha et thb.

Le thread tha incrémente valueglobale 100 000 fois et le thread thb décrémente valueglobale 100 000 fois.

Questions
  1. Quelle devrait être la valeur finale de valueglobale ?
  2. Que remarquez-vous après plusieurs exécutions du programme ?
  3. Expliquer ce phénomène.

Rappels des fonctions de manipulation des threads

  1. #include <pthread.h>
  2. int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*routine)(void*), void *arg);

    La fonction pthread_create crée un thread et renvoie 0 si la création s'est déroulée avec succès, ou un code d'erreur sinon. Elle reçoit en argument :

    • le TID (Thread Identifier) du thread,
    • une constante (attributs du thread),
    • un pointeur vers la fonction exécutée par le thread,
    • un argument de la fonction.
  3. int pthread_exit(void *valueptr);

    La fonction pthread_exit permet de quitter un thread.

  4. int pthread_join(pthread_t *thread, void **valueptr);

    La fonction pthread_join bloque l'appelant en attente de la fin du thread passé en premier argument, tandis que le second argument est un pointeur de pointeur qui servira à récupérer l'adresse de la valeur renvoyée par le thread lors de son exit. Cette fonction renvoie 0 si le thread se termine correctement, sinon elle renvoie un code d'erreur.

FAQ
Pourquoi la valeur finale de valueglobale n'est-elle pas toujours 0 ?

Les threads s'exécutent de manière concurrente et non synchronisée. Chaque incrémentation ou décrémentation de la variable est une opération qui peut être interrompue par l'autre thread, provoquant des incohérences.

Comment résoudre ce problème d'accès concurrent ?

Utilisez des mécanismes de synchronisation comme les mutex (pthread_mutex_t) pour protéger l'accès à la variable partagée. Cela garantit que seul un thread peut modifier la variable à la fois.

Qu'est-ce qu'un mutex et à quoi sert-il ?

Un mutex (mutual exclusion) est un verrou qui permet de contrôler l'accès à une ressource partagée. Il empêche les threads d'accéder simultanément à une section critique de code, évitant ainsi les problèmes de concurrence.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne