Title: Delphi pour Net 8 aspects du multi-threading
1Delphi pour Net8aspects du multi-threading
- le thread principal dapplication
- aperçu de la classe TThread
- méthodes Synchronize et Queue
- sections critiques
2le thread principal dapplication
composants VCL
thread principal dapplication
file dattente des messages
gestionnaires dévénements
- thread principal dapplication
- exécution de lapplication
- exécution des composants VCL
- file dattente principale des messages
- stratégie non thread-safe de la librairie VCL
- implémentations cachées
- interactions complexes
- souci des performances
- force à diminuer les interactions
3aperçu de la classe TThread
TThreadMethod procedure of object
TThread class protected procedure
Execute virtual
abstract procedure Queue (AMethod
TThreadMethod) overload procedure
Synchronize(AMethod TThreadMethod) overload
public constructor Create
(CreateSuspended Boolean) destructor
Destroy override procedure Resume
procedure Suspend class
procedure Queue (AThread TThread AMethod
TThreadMethod)overload class procedure
StaticQueue (AThread TThread AMethod
TThreadMethod) end
- méthode Execute
- corps du thread
- terminaison normale Execute se termine
- paramètre CreateSuspended du constructeur Create
- true le thread est créé suspendu (nécessite
ensuite un appel à Resume) - false la méthode Execute commence tout de suite
son exécution
4méthodes Synchronize et Queue
TThreadMethod procedure of object
procedure TMyThread.doSomething begin
end procedure TMyThread.Execute begin
Synchronize( doSomething )
Queue( doSomething ) end
avec attente de la fin de la méthode à
synchroniser
sans attente de la fin de la méthode à
synchroniser
- méthode Synchronize de TThread
- déclarée protected
- synchronise une méthode sans paramètres
- appel bloquant jusquà la fin de la méthode
- méthode dinstance Queue de TThread
- déclarée protected
- synchronisation dune méthode sans paramètres
- appel passant (pas dattente de la fin de la
méthode) - cf. la méthode de classe StaticQueue de TThread
5la classe TThreadList
TThreadList class private FList
TList // liste TList sous-jacente
FDuplicates TDuplicates // autoriser ou non
les duplications public constructor Create
function LockList TList //
verrouiller la liste procedure UnlockList
// déverrouiller la liste procedure
Clear // vider la liste
!!! thread-safe procedure Add ( Item
TObject ) // ajouter un élément !!!
thread-safe procedure Remove ( Item TObject
) // supprimer un élément !!! thread-safe
property Duplicates TDuplicates read
FDuplicates write FDuplicates end
- wrapper thread-safe de la classe TList
- verrouillage via Lock/Unlock
- méthodes Add, Clear, Remove thread-safe
procedure var wList TList begin
wList FList.LockList try
if wList.Count then
finally FList.UnlockList end end
- file dattente thread-safe
- références dobjets
- sur string et tout type de base boxé
6sections critiques avec TCriticalSection
FCriticalSection TCriticalSection.Create
création de lobjet de synchronisation
// section critique en Acquire/Release
FCriticalSection.Acquire try // ici
corps de la section critique finally
FCriticalSection.Release end try // section
critique en Enter/Leave FCriticalSection.Enter
try // ici corps de la section
critique finally FCriticalSection.Leave end
try
- réalisation de sections critiques
- objet de synchronisation TCriticalSection
- synchronisation via Acquire/Release
- méthodes Enter/Leave strictement équivalentes