Après « l'exemple d'école » des Types Abstraits de données : la pile, on présente « l'exemple d'école » du parallélisme : il s'agit de l'exemple des lecteurs-écrivains, qu'on traite ici avec une priorité égale pour les lecteurs et les écrivains.
1. La spécification du problème
L'exemple appartenant au domaine du parallélisme, on utilisera les réseaux de Petri pour le spécifier.
Pour construire le réseau des lecteurs-écrivains on utilise la ressource double :
![]() | ![]() |
| ressource double | flux de contrôle |
ressource double R(P,Q), Q≤P : | ||
reserve | : | réserve un point d'entrée de la ressource : au maximum P réservations ; |
free | : | libère un point d'entrée de la ressource : au minimum 0 réservation ; |
test | : | teste si le nombre de points d'entrée réservés est inférieur strictement à Q ; |
init | : | initialise la ressource. |
| Une tâche est bloquée : | ||
- sur reserve | : | quand P points d'entrée sont occupés ; |
- sur free | : | quand aucun point d'entrée n'est occupé ; |
- sur test | : | quand au moins Q points d'entrée (Q≤P) sont occupés. |
Les lecteurs-écrivains
| On utilise deux ressources doubles : | ||
R_ecr = R(1,1) | : | la ressource des écrivains : les écrivains sont en exclusion mutuelle ; les écrivains sont en exclusion avec les lecteurs. |
R_lect = R(∞,1) | : | la ressource des lecteurs : les lecteurs peuvent travailler simultanément ; les lecteurs sont en exclusion avec les écrivains. |

E_reserve (réservation d'un écrivain)
L_reserve (réservation d'un lecteur)
E_free (libération d'un écrivain)
L_free (libération d'un lecteur)