Utilisation de sections critiques
Remonter à Eviter les accès simultanés
Pour les objets ne disposant pas de verrouillage intégré, vous pouvez utiliser une section critique. Les sections critiques fonctionnent comme des portes qui ne permettent l'entrée qu'e d'un seul thread à la fois. Pour utiliser une section critique, créez une instance globale de System.SyncObjs.TCriticalSection. System.SyncObjs.TCriticalSection dispose de deux méthodes, Acquire (qui empêche les autres threads d'exécuter la section) et Release (qui retire le blocage).
Chaque section critique est associée à la mémoire globale devant être protégée. Chaque thread accédant à cette mémoire globale doit commencer par utiliser la méthode Acquire pour vérifier qu'un autre thread n'est pas en train de l'utiliser. Une fois terminé, le thread appelle la méthode Release afin que les autres threads puissent accéder à la mémoire globale en appelant Acquire.
Avertissement : Les sections critiques ne peuvent fonctionner que si tous les threads les utilisent pour accéder à la mémoire globale associée. Les threads qui ne tiennent pas compte des sections critiques et accèdent à la mémoire globale sans appeler Acquire peuvent provoquer des problèmes d'accès simultanés.
Par exemple, une application a une section critique des variables globales, LockXY, qui bloque l'accès aux variables globales X et Y. Tout thread utilisant X ou Y doit encadrer cette utilisation d'appels à la section critique comme ci-dessous :
LockXY.Acquire; { lock out other threads }
try
Y := sin(X);
finally
LockXY.Release;
end;
pLockXY->Acquire(); // lock out other threads
try {
Y = sin(X);
}
__finally {
pLockXY->Release();
}