Académique Documents
Professionnel Documents
Culture Documents
2- Les causes :
1. Accès exclusif : Les ressources ne peuvent être exploitées que par un seul processus à la fois.
2. Attente et occupation : Les processus qui demandent de nouvelles ressources gardent celles qu'ils
ont déjà acquises et attendent la satisfaction de leur demande
3. Pas de réquisition : Les ressources déjà allouées ne peuvent pas être réquisitionnées.
4. Attente circulaire : Les processus en attente des ressources déjà allouées forment une chaîne
circulaire d'attente.
3- Les solutions :
• Prévention : On élimine complètement le risque d’interblocage en faisant en sorte que l’une de ses
quatre conditions d’apparition ne soit pas vérifiée.
• Evitement : On évite le risque d’interblocage en veillant à que le système évolue uniquement entre
états sains.
La différence clé entre les deux est que dans un deadlock, les processus sont complètement bloqués
et ne font aucun travail, tandis que dans un livelock, ils sont constamment actifs mais sans réaliser de
progrès utile.
1. Objectif de base :
Mutex : Le principal objectif d'un mutex (mutual exclusion) est de garantir l'accès
exclusif à une ressource partagée.
Sémaphore : Un sémaphore peut également être utilisé pour garantir l'accès exclusif
à une ressource en utilisant un sémaphore binaire.
Mutex : Il est souvent utilisé pour protéger des sections critiques du code,
permettant à un seul thread ou processus d'exécuter ces sections à la fois.
Sémaphore : Un sémaphore peut être utilisé pour protéger des sections critiques de
manière similaire à un mutex, en utilisant un sémaphore binaire.
Différences :
1. Utilisation générale :
Mutex : Principalement utilisé pour assurer l'accès exclusif à une seule ressource
partagée.
Sémaphore : Peut être utilisé pour gérer l'accès à un ensemble de ressources, et pas
seulement à une ressource unique.
2. Valeurs et opérations :
Sémaphore : Peut avoir n'importe quelle valeur entière positive. Les opérations de
base sont P (attente) pour décrémenter et V (signal) pour incrémenter. Un
sémaphore binaire peut être utilisé de manière similaire à un mutex.
9- Définition du sémaphore :
Sémaphore : Un sémaphore est un outil de synchronisation plus généralisé qui contrôle l’accès à une
ressource partagée par plusieurs threads. Un sémaphore maintient un compteur qui représente le
nombre de threads qui peuvent accéder à une ressource. Si la valeur du compteur est supérieure à
zéro, le thread peut accéder à la ressource et le compteur est décrémenté. Si la valeur est zéro, le
thread doit attendre2. *
Le premier mutex est utilisé pour contrôler l’accès au tapis roulant. Quand la machine produit un
jouet, elle “verrouille” le tapis roulant, place le jouet dessus, puis “déverrouille” le tapis roulant. De
même, quand l’employé prend un jouet pour l’emballer, il “verrouille” le tapis roulant, retire le jouet,
puis “déverrouille” le tapis roulant.
Le second mutex est utilisé pour contrôler le nombre de jouets sur le tapis roulant. Si la machine
produit des jouets plus rapidement que l’employé ne peut les emballer, le tapis roulant peut se
remplir. Quand cela se produit, la machine doit attendre jusqu’à ce qu’il y ait de l’espace disponible
sur le tapis roulant avant de pouvoir produire plus de jouets.
12- Oui, il est possible de créer des situations potentielles d'interblocage (deadlock) lors de la
mise en place de la synchronisation entre processus. L'interblocage se produit généralement
en présence de plusieurs processus qui attendent indéfiniment des ressources détenues par
d'autres processus, créant ainsi un cercle d'attente circulaire.
Processus 1 :
Attente de la ressource A
Possède la ressource B
Processus 2 :
Attente de la ressource B
Possède la ressource A
Si les deux processus commencent à exécuter leurs actions en même temps et chacun acquiert une
ressource avant d'en demander une autre, ils peuvent entrer dans une situation d'interblocage où
aucun des processus ne peut progresser, car chaque processus détient une ressource que l'autre
attend.
Pour éviter l'interblocage, des mécanismes de synchronisation appropriés tels que des mutex, des
sémaphores, ou des ordonnanceurs de tâches peuvent être utilisés de manière stratégique. Les
bonnes pratiques pour la gestion de la synchronisation incluent l'ordonnancement cohérent des
acquisitions de ressources, l'utilisation de hiérarchies de verrouillage, et la libération appropriée des
ressources une fois qu'elles ne sont plus nécessaires.
Il est important de concevoir les interactions entre les processus avec soin pour éviter les conditions
d'interblocage potentielles. Des outils de débogage, tels que les analyseurs de deadlock, peuvent
également être utiles pour détecter et prévenir les interblocages dans des applications plus
complexes.