Maison  >  Article  >  Que comprend le mécanisme de synchronisation multithread ?

Que comprend le mécanisme de synchronisation multithread ?

coldplay.xixi
coldplay.xixioriginal
2021-01-07 15:24:197593parcourir

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.

Que comprend le mécanisme de synchronisation multithread ?

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

Les événements et les sémaphores peuvent réaliser une exclusion mutuelle et une synchronisation entre les threads et les processus.

En termes d'efficacité d'utilisation, la section critique a la plus grande efficacité, car ce n'est pas un objet du noyau, et les trois autres sont des objets principaux. Ils doivent donc être implémentés avec l'aide du système d'exploitation. l'efficacité est relativement faible.

Mais si vous souhaitez l'utiliser dans plusieurs processus, vous devez toujours utiliser des mutex, des objets d'événement et des sémaphores.

En bref : lors de la conception, essayez de ne pas utiliser de variables globales en premier. Sinon, pensez à utiliser d'abord la fonction Inter...(), puis l'objet de section critique, et enfin l'événement, le mutex, le sémaphore.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:qu'est-ce qu'un logicielArticle suivant:qu'est-ce qu'un logiciel