Le mécanisme de synchronisation multi-thread comprend : 1. Section critique, utilisée pour obtenir une « possession exclusive » ; 2. Sémaphore, utilisé pour suivre les ressources limitées ; 3. Mutex, qui peut être utilisé dans différents threads ; possession exclusive" entre les threads, même si ces threads appartiennent à des processus différents ; 4. Événement, généralement utilisé pour les E/S superposées, ou utilisé pour concevoir certains objets de synchronisation personnalisés.
L'environnement d'exploitation de cet article : système Windows 7, ordinateur Dell G3.
Le mécanisme de synchronisation multithread comprend :
1, Critical Section
La section critique (section critique) est utilisée pour obtenir la "possession exclusive" . Le champ d'application se situe entre les threads d'un même processus. C'est :
Un objet local, pas un objet central.
Rapide et efficace.
Plus d'une section critique ne peut pas attendre en même temps.
Impossible de détecter s'il a été abandonné par un fil de discussion.
peut réaliser une exclusion mutuelle entre les threads, mais ne peut pas être utilisé pour réaliser une synchronisation.
2. Semaphore
Le sémaphore est utilisé pour suivre les ressources limitées. C'est :
Un objet central.
n'a pas de propriétaire.
peut être nommé, afin qu'il puisse être ouvert par d'autres processus.
peut être publié par n'importe quel fil de discussion.
peut réaliser une exclusion mutuelle entre les threads et une synchronisation entre les threads.
Lorsqu'il est utilisé dans plusieurs processus, si le thread propriétaire du sémaphore se termine de manière inattendue, les autres processus ne seront pas avertis.
3. Mutex
Mutex est un objet de base qui peut obtenir une "possession exclusive" entre différents threads, même si ces threads appartiennent à des processus différents. C'est :
Un objet central.
Si le thread propriétaire du mutex se termine, un message d'erreur "abandonné" sera généré.
je peux être nommé, afin qu'il puisse être ouvert par d'autres processus.
ne peut être publié que par le fil de discussion qui en est propriétaire.
Lorsqu'il est utilisé dans plusieurs processus, si le processus propriétaire du mutex se termine de manière inattendue, les autres processus recevront un message WAIT_ABANDOEND
.
4. Event
L'objet événement est généralement utilisé pour les E/S superposées ou pour concevoir des objets de synchronisation personnalisés. C'est :
Un objet central.
peut être utilisé pour réaliser une exclusion mutuelle et une synchronisation des threads.
peut être nommé, afin qu'il puisse être ouvert par d'autres processus.
Lorsqu'il est utilisé dans plusieurs processus, si le thread propriétaire du sémaphore se termine de manière inattendue, les autres processus ne seront pas avertis.
Remarque : les sections critiques et les mutex ont tous deux le concept de "propriété des threads", ils ne peuvent donc pas être utilisés pour réaliser la synchronisation entre les threads, mais ne peuvent être utilisés que pour implémenter une exclusion mutuelle. La raison en est que le thread qui crée la section critique ou mutex peut entrer sans condition dans la section protégée du programme sans attendre LeaveCriticalSection()
, car il a ce droit. De plus, les mutex peuvent très bien gérer les opérations « d’abandon ». Si le thread se termine de manière inattendue avant de libérer l'objet, les autres threads peuvent attendre un SetEvent()
. Mais ni les événements ni les sémaphores ne peuvent faire cela. WAIT_ABANDONED_0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!