// pour créer un mutex, déclarez une variable de type Boolean (initialisée à False)
// routine pour prendre la main dès que possible
procedure RequestMutex(var Mutex: Boolean);
begin
repeat until not Mutex;
Mutex := True;
end;
// routine pour laisser la main
procedure ReleaseMutex(var Mutex: Boolean);
begin
Mutex := False;
end;
// utilisation
begin
RequestMutex(MutexDonnee);
// modifier la donnée, on est tranquilles ici
ReleaseMutex(MutexDonnee);
end;
// Avertissement : si ReleaseMutex n'est pas appellée à chaque fois, la donnée sera verrouillée, soyez donc certains de votre coup sinon ça reste coincé !
Remarque :
Parfois il est nécessaire de synchroniser une donnée pour éviter qu'elle ne soit lue et écrite en même temps, ce qui peut poser pas mal de problèmes, en particulier lorsqu'on jongle avec plein de threads en même temps. Ceci est une solution simple, qui assure qu'une donnée protégée par le mutex ne peut être accédée qu'une fois à un moment donné. En revanche cette méthode ne permet pas de contrôler l'ordre d'accès.