Programmation concurrente - IS
TP2
Pour les exercices suivants, on prêtera une attention particulière à l'usage de la mémoire et à la synchronisation des processus à la terminaison. Faites vérifier par vos enseignants après chaque exercice.
Exercice 1
Réaliser un programme gérant le solde d'un compte en banque avec des accès concurrent par deux threads secondaires associés à la même fonction qui :
- Génère un nombre aléatoire d'opérations à faire entre 1 et 10
- Pour chaque opération, détermine aléatoirement si c'est un crédit ou un débit
- Choisit aléatoirement le montant de l'opération entre 50 et 150
- Réalise l'opération sur le compte si cela est possible
Le solde initial du compte sera de 500. Les threads afficheront chaque opération uniquement si elle est réalisée. À la fin, le thread principal affiche le solde.
Exercice 2
Pour cet exercice, on va réutiliser le principe producteur/consommateur vu en cours, mais en ayant un producteur pour deux consommateurs. On va créer un programme qui sera notre thread principal producteur, et qui créera deux threads secondaires (les consommateurs). Le programme aura les caractéristiques suivantes :
- Le thread principal produit 20 nombres aléatoires qui seront rangés successivement dans une variable entière
- Les threads secondaires vont réaliser la somme de tous ceux de ces entiers qui ne sont pas entre deux bornes. Le premiers threads sélectionne tous les nombres qui sont plus petits que la borne inférieure, le deuxième sélectionne ceux qui sont plus grands que la borne supérieure.
- Les bornes inférieure et supérieure sont passées par le processus principal à la création des threads
- Dès qu'un nombre est produit par le thread principal, il est également lu par les deux threads secondaires (consommateurs). Les traitements des threads secondaires sont parallèles
- Après 20 nombres, les threads secondaires se terminent et le thread principal affiche la somme
- L'utilisateur doit entrer les bornes inférieure et supérieure, tout le reste se fait sans intervention de l'utilisateur