Exercices corrigés TD Programmation concurrente avec les Threads

Ce document est destiné aux étudiants de l'Université Constantine 2 pour le semestre 1 de l'année académique 2020-2021. Il traite du développement d'applications réparties (DARE) et inclut des exercices corrigés sur la programmation concurrente avec les threads.

Il couvre les notions suivantes:

  • Création et gestion de threads pour des tâches concurrentes.
  • Identification des situations de concurrence et des sections critiques.
  • Analyse de diagrammes de séquence pour évaluer les temps de calcul.
  • Utilisation de la classe Dormeur pour gérer les dépendances entre threads.

Exercices TD Programmation concurrente avec les Threads

Télécharger PDF

Développement d'applications réparties (DARE)

Exercice 1

Écrire un programme qui crée deux Threads « Th1 » et « Th2 », l’un des deux threads doit compter de 1 à 1000 et l’autre thread doit inversement décompter de 1000 à 1.

Réponse :

Il suffit de créer deux objets exécutables appartenant à la même classe (par exemple ClassCompteur). Le sens du compteur sera passé dans le créateur de l’objet. Ensuite créer les 2 threads et démarrer :

public class ClassCompteur implements Runnable{
 String nom="Compt";
 int maxIter= 1000 ;
 int Direction=0;
 public ClassCompteur (String nom, int laDirection) {
this.nom=nom;
 this.Direction=laDirection;
 }
 public void run()
 {
 System.out.println("Ici le thread %s, debute!\n", nom);
 for (int i = 0; i < maxIter; i++) {
 System.out.println("[%s] dit %d\n",nom,(maxIter-1)*( (1-Direction)/2 )+Direction*i);
 }
 }
 public static void main(String[] args) throws Exception {
 ClassCompteur objetA = new ClassCompteur ("Th1",1);
Thread Th1 = new Thread(objetA);
 ClassCompteur objetB = new ClassCompteur ("Th2",-1);
 Thread Th2 = new Thread(objetB);
Th1.start();
Th2.start();
System.out.println("Thread principal terminé !\n");
 }
}

Exercice 2

1. Le programme P a-t-il des situations de concurrence? Justifiez votre réponse.

Réponse :

Les deux threads tentent d'accéder au même moment à la ressource partagée v et au moins l'un d'entre eux est susceptible de modifier son état. Ainsi, le programme P peut se terminer avec différentes valeurs finales de la variable v, ce qui correspond à la définition des situations de concurrence.

2. Quelles sont les sections critiques du code exécuté par le thread t et du code exécuté par le thread u?

Réponse :

Puisque les deux threads accèdent à la variable partagée v dans chaque instruction de leur code, leurs sections critiques correspondent au code entier exécuté.

Exercice 3

Le calcul prend au moins 80 unités de temps, comme le montre le diagramme de séquence suivant :

t1 t2 t3 t4
doTask1
doTask2
evaluate40
20
doTask320
30
80
finish20

Exercice 4

Le programme crée trois threads A,B,C opérant sur « Dormeur » :

  • Un Objet de la classe Dormeur a un antécédent qui est un thread.
  • Le constructeur de la classe Dormeur prend en paramètre une liste de threads à attendre.
  • La méthode run() de Dormeur commence par attendre que l’antécédent ai terminé puis avant de se terminer elle écrit un message (du type je suis xx j’ai fini).
  • Les 3 threads sont créés à partir de Dormeur, où pour chacun est défini son antécédent :
    • C est construit de manière qu’il n’attende personne.
    • B est construit pour qu’il attende C.
    • A est construit pour qu’il attende B.

FAQ

Qu'est-ce qu'un thread en programmation?

Un thread est une unité d'exécution au sein d'un processus. Il permet de réaliser des tâches parallèles ou concurrentes.

Quelle est la différence entre un thread et un processus?

Un processus est une instance d'un programme en cours d'exécution, tandis qu'un thread est une unité d'exécution au sein d'un processus. Les threads partagent les mêmes ressources que le processus parent, tandis que les processus ont leurs propres ressources.

Comment gérer les situations de concurrence entre threads?

Les situations de concurrence peuvent être gérées en utilisant des mécanismes de synchronisation comme les verrous (locks), les sémaphores, et les moniteurs.



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