Manuel §1.6.18    

Fonction TestAndSet

La fonction TestAndSet permet de réserver une ressource à une clause événementielle.

TestAndSet( Variable) : Booléen

Cette fonction attend en paramètre une variable qui contient soit zéro, soit un. Si la variable contient zéro la fonction la met à un et rend un ( la ressource est maintenant disponible pour l ’appelant), dans les autres cas la fonction rend zéro et laisse inchangée la variable (la ressource n ’a pas pu être réservé par l ’appelant). Lorsque une clause a réservé une variable elle se doit de la libérer le plus tôt possible en la mettant à zéro.

Exemple

While TestAndSet( Semaphore) == 0 do Wait ;
Fichier = FileOpen( " C :\Message.txt ",  " wt ") ;
FileWriteln( Fichier, " Action en cours ") ;
FileClose( Fichier) ;
Semaphore = 0 ;

Cette fonction est nécessaire dans les cas où on a un risque d ’accès simultané à une ressource par plusieurs clauses qui s ’exécutent en parallèle. Un test suivi d ’une affectation ne suffisent pas, car une clause peut être suspendue à la fin de son quantum de temps entre le test et l ’affectation.