Académique Documents
Professionnel Documents
Culture Documents
2023-2024
Exercice 1. (Mutex )
Donner le code équivalent en utilisant try-lock :
i++
pthread_mutex_lock(&m1);
j++
Thread 1 Thread 2
O16:pthread_mutex_unlock(&m1); O26:pthread_mutex_unlock(&m2);
Changer le code suivant afin que les deux threads ne démarrent que qu'après l'exécution de l'instruction
l++ ; proposer une solution à base de Mutex et une autre à base de Sémaphore.
Thread 1 Thread 2
} }
Ajouter les instructions nécessaires de sorte que O22 s'exécutent toujours après O12 pour chaque itération.
2
Exercice 7. (variable de condition, affichage croissant)
Soit le code suivant. On souhaite obtenir un affichage croissant et ordonné des nombres, sans pour autant
perdre le parallélisme entre O11 et O21.
Donner une solution à base de sémaphores puis une autre à base de variable de condition.
Thread 1 Thread 2
Exercice 8.
Les douches des garçons sont en rénovation à la cité universitaire. Les douches des filles serviront donc pour
les deux sexes. La salle de douches comporte quatre cabines de douches. L’ Office des Œuvres Universi-
taires impose les conditions suivantes :
- Jamais un garçon et une fille ensemble dans les douches
- Pas plus de quatre personnes (du même sexe, donc) dans les douches
- L'attente se fait à la porte
a/ En modélisant garçons et filles comme des threads indépendants, et à l'aide de sémaphores et/ou mutexs,
résolvez ce problème en utilisant le canevas suivant.
Thread_garçon { Thread_fille {
attendre (G); // G désigne garçon attendre (F); // F désigne fille
se_doucher; se_doucher;
sortir(G); sortir(F);
} }
... pthread_mutex_lock(&mutex);
3
while(1) { pthread_cond_wait(&condition, &mutex);
nombre = rand()%10; pthread_mutex_unlock(&mutex);
compteur += nombre;
printf("\nLE COMPTEUR A DÉPASSÉ 20.");
if(compteur >= 20) { }
pthread_mutex_lock (&mutex); }
pthread_cond_signal
(&condition);
pthread_mutex_unlock (&mutex);
compteur = 0;
}
sleep (1);
}
}