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
Le schéma qui spécifie le comportement du module des lecteurs-écrivains peut se construire par des traitements séquentiels, la synchronisation se faisant par des objets communs – ici les ressources doubles R_ecr et R_lect. Le module peut donc être réalisé assez simplement.
Interface des lecteurs-écrivains
INTERFACE OF lecteurs-écrivains;
PROCEDURE Initialiser;
PROCEDURE E_reserve;
PROCEDURE L_reserve;
PROCEDURE E_free;
PROCEDURE L_free;
END INTERFACE;
Corps des lecteurs-écrivains
BODY OF lecteurs-écrivains;
USE ressources-doubles;
VAR R_ecr,R_lect : ressource-double;
PROCEDURE Initialiser;
BEGIN
Initialiser( R_ecr, 1, 1 );
Initialiser( R_lect, 10000, 1 ); % 10000 = ∞
END;
PROCEDURE E_reserve;
BEGIN
reserve(R_ecr);
test(R_lect);
END;
PROCEDURE L_reserve;
BEGIN
test(R_ecr);
reserve(R_lect);
END;
PROCEDURE E_free;
BEGIN
free(R_ecr);
END;
PROCEDURE L_free;
BEGIN
free(R_lect);
END;
END BODY;
Interface des ressources doubles
INTERFACE OF ressources-doubles;
TYPE ressource-double;
PROCEDURE Initialiser( R:INOUT ressource-double;
max_reserve,max_free:IN integer );
PROCEDURE reserve( R:INOUT ressource-double );
PROCEDURE test( R:INOUT ressource-double );
PROCEDURE free( R:INOUT ressource-double );
END INTERFACE;