Maison >Java >javaDidacticiel >java - Concept de sémaphore et similitudes et différences entre les verrous et les sémaphores

java - Concept de sémaphore et similitudes et différences entre les verrous et les sémaphores

php是最好的语言
php是最好的语言original
2018-08-06 16:32:024406parcourir

  • Sémaphore

Objectif : Vous pouvez utiliser des sémaphores pour limiter le nombre de threads accédant à une ressource partagée

Signification : Les sémaphores font référence à des objets qui contrôlent l'accès aux ressources communes. Avant d'accéder à la ressource, le thread doit obtenir une autorisation du sémaphore. Après avoir accédé à la ressource, le thread doit renvoyer l'autorisation au sémaphore. Une fois l'autorisation obtenue, le nombre total d'autorisations disponibles dans le sémaphore est réduit de 1. Une fois l'autorisation libérée, le nombre d'autorisations dans le sémaphore est augmenté de 1.       

java - Concept de sémaphore et similitudes et différences entre les verrous et les sémaphores

Un seul sémaphore autorisé peut être utilisé pour simuler un verrouillage mutuellement exclusif.

java - Concept de sémaphore et similitudes et différences entre les verrous et les sémaphores

Exemple :

                                                                                    Où ?

(Le verrou ici fait référence à un verrou mutex)

java - Concept de sémaphore et similitudes et différences entre les verrous et les sémaphores

Différence :

Portée

Sémaphore : inter-processus ou inter-thread
  1. Mutex : inter-thread

Exécution en cas de verrouillage

Sémaphore : Si la valeur du sémaphore > alors d'autres threads peuvent effectuer des tâches. Et après une exécution réussie, value--; if value=0, alors le thread sem_wait provoque le blocage du thread jusqu'à ce que value++ soit libéré après la libération de sem_post, et d'autres threads peuvent s'exécuter en fonction de la valeur.
  1. Verrouillage mutex : un seul objet est verrouillé (verrouillé), aucun autre thread ne peut accéder à l'objet verrouillé.

L'un est la synchronisation et l'autre est l'exclusion mutuelle

Sémaphore : utilisé en multi -threading Le multitâche est synchronisé. Lorsqu'un thread termine une action, il indique aux autres threads via un sémaphore que les autres threads effectuent certaines actions.
  1. Verrouillage Mutex : utilisé pour l'exclusion mutuelle des multi-threads et des multi-tâches. Une fois qu'un thread occupe une ressource, les autres threads ne peuvent pas y accéder. Ce n'est que lorsque ce thread est déverrouillé que les autres threads peuvent l'utiliser.

En d'autres termes, le sémaphore ne verrouille pas nécessairement une certaine ressource, mais un concept de processus. Par exemple : il y a deux threads A et B, et le thread B doit attendre le thread. A à terminer. Après une certaine tâche, vous pouvez effectuer les étapes suivantes. Cette tâche n'implique pas nécessairement le verrouillage d'une certaine ressource, mais peut également effectuer certains calculs ou traitements de données. Le thread mutex est le concept de « verrouillage d'une certaine ressource ». Pendant la période de verrouillage, les autres threads ne peuvent pas opérer sur les données protégées. Dans certains cas, les deux peuvent être interchangés

. Articles associés :

Exemples de sémaphores mutex et de mécanismes d'attente multi-thread en Java

Explication détaillée d'exemples d'utilisation de base des sémaphores PHP


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