Junior
Quelle est la différence entre un mutex et un sémaphore?
sobes.tech IA
Réponse de l'IA
Un mutex est un sémaphore binaire qui est soit libre (valeur 1), soit occupé (valeur 0). Il est utilisé pour protéger les sections critiques et assurer un accès exclusif à une ressource. Seul le thread qui a acquis le mutex peut le libérer.
Un sémaphore est une généralisation du mutex, représentant un compteur. Il peut prendre des valeurs non négatives et est utilisé pour gérer l'accès à un nombre limité de ressources. Un thread peut acquérir un sémaphore si le compteur est supérieur à zéro (le décrémentant), et le libérer (en l'incrémentant). Un sémaphore peut être libéré par un autre thread, pas nécessairement celui qui l'a acquis.
Principales différences:
- But: Mutex pour protéger les sections critiques, Sémaphore pour gérer l'accès aux ressources.
- Valeur: Mutex (0 ou 1), Sémaphore (tout nombre non négatif).
- Propriété: Mutex a un propriétaire (le thread qui l'a acquis), Sémaphore n'a pas de concept clair de propriété.
- Qui peut le libérer: Seul le propriétaire peut le faire dans le mutex, tout thread peut le faire dans le sémaphore.
#include <mutex> // Pour std::mutex
#include <semaphore> // Pour std::counting_semaphore
std::mutex mtx; // Mutex pour protéger la ressource
void critical_section() {
mtx.lock(); // Acquisition du mutex
// Accès à la ressource partagée
mtx.unlock(); // Libération du mutex
}
// Sémaphore pour gérer l'accès à 5 ressources
std::counting_semaphore<5> sem(5);
void access_resource() {
sem.acquire(); // Acquisition de la ressource (décroît le compteur)
// Utilisation de la ressource
sem.release(); // Libération de la ressource (augmente le compteur)
}
Comparaison en tableau:
| Caractéristique | Mutex | Sémaphore |
|---|---|---|
| Type | Objet de synchronisation (sémaphore binaire) | Objet de synchronisation (compteur) |
| Valeur | 0 (occupé), 1 (libre) | Nombre non négatif |
| But | Protection des sections critiques, exclusion mutuelle | Gestion de l'accès aux ressources limitées |
| Propriété | A un propriétaire (le thread qui l'a acquis) | N'a pas de concept clair de propriété |
| Qui peut le libérer | Seul le propriétaire | Tout thread |