Différence entre exclusion mutuelle et synchronisation?
Quelle est la différence entre les deux?
Cette question est venue à mon esprit parce que je trouve que
- Les moniteurs et les verrous de fournir de l'exclusion mutuelle
- Les sémaphores et les variables conditionnelles fournir la synchronisation
Est-ce vrai?
Aussi en cherchant j'ai trouvé ce l'article
Des précisions s'il vous plaît.
source d'informationauteur Tanya | 2012-04-11
Vous devez vous connecter pour publier un commentaire.
Exclusion mutuelle signifie que seul un thread doit être en mesure d'accéder à la ressource partagée à tout moment. Cela évite que les conditions de concurrence entre les threads acquireing la ressource. Les moniteurs et les Serrures de fournir la fonctionnalité de le faire.
Synchronisation signifie que vous synchronisez/commander l'accès de plusieurs threads à la ressource partagée.
Prenons l'exemple:
Si vous avez deux fils,
Thread 1
&Thread 2
.Thread 1
etThread 2
exécuter en parallèle, mais avantThread 1
peut exécuter dire une déclarationA
dans sa séquence, il est indispensable queThread 2
doit exécuter une instructionB
dans sa séquence. Ce dont vous avez besoin ici est la synchronisation. Un sémaphore prévoit que. Vous mettez un semapohore attendre avant de faire la déclarationA
dansThread 1
et que vous affichez le sémaphore après déclarationB
dansThread 2
.Cela garantit la synchronisation dont vous avez besoin.
La meilleure façon de comprendre la différence est avec l'aide d'un exemple.Ci-dessous le programme pour résoudre le classique producteur problème de consommation via semaphore.Pour fournir de l'exclusion mutuelle nous genrally utiliser un sémaphore binaire ou d'un mutex et de fournir la synchronisation nous utiliser le comptage de sémaphore.
Dans le code ci-dessus le mutex variable permet d'exclusion mutuelle(un seul thread d'accéder à la section critique) alors que le plein et le vide variable sont utilisés pour la synchronisation(pour aribtrate l'accès à des ressources partagées entre les différents thread).