Wat is het verschil tussen een mutex en een semaphore?
sobes.tech AI
Antwoord van AI
Een mutex is een binaire semaphore die of vrij (waarde 1) of bezet (waarde 0) is. Het wordt gebruikt om kritieke secties te beschermen en exclusieve toegang tot een resource te garanderen. Alleen de thread die de mutex heeft verworven, kan deze vrijgeven.
Een semaphore is een generalisatie van een mutex, die een teller vertegenwoordigt. Het kan niet-negatieve waarden aannemen en wordt gebruikt om de toegang tot een beperkt aantal resources te beheren. Een thread kan een semaphore verwerven als de teller groter is dan nul (en deze verlagen), en vrijgeven (door de teller te verhogen). Een semaphore kan door een andere thread worden vrijgegeven, niet noodzakelijk degene die het heeft verworven.
Belangrijkste verschillen:
- Doel: Mutex voor het beschermen van kritieke secties, Semaphore voor het beheren van toegang tot resources.
- Waarde: Mutex (0 of 1), Semaphore (elke niet-negatieve waarde).
- Eigendom: Mutex heeft een eigenaar (de thread die het heeft verworven), Semaphore heeft geen duidelijk eigendom.
- Wie kan het vrijgeven: Alleen de eigenaar kan het vrijgeven in de mutex, elke thread kan het vrijgeven in de semaphore.
#include <mutex> // Voor std::mutex
#include <semaphore> // Voor std::counting_semaphore
std::mutex mtx; // Mutex voor het beschermen van de resource
void critical_section() {
mtx.lock(); // Mutex verwerven
// Toegang tot de gedeelde resource
mtx.unlock(); // Mutex vrijgeven
}
// Semaphore voor het beheren van toegang tot 5 resources
std::counting_semaphore<5> sem(5);
void access_resource() {
sem.acquire(); // Resource verwerven (verlaagt de teller)
// Gebruik van de resource
sem.release(); // Resource vrijgeven (verhoogt de teller)
}
Vergelijking in tabel:
| Kenmerk | Mutex | Semaphore |
|---|---|---|
| Type | Synchronisatieobject (binaire semaphore) | Synchronisatieobject (teller) |
| Waarde | 0 (bezet), 1 (vrij) | Niet-negatief getal |
| Doel | Bescherming van kritieke secties, wederzijdse uitsluiting | Beheer van toegang tot beperkte resources |
| Eigendom | Heeft een eigenaar (de thread die het heeft verworven) | Heeft geen duidelijk eigendom |
| Wie kan het vrijgeven | Alleen de eigenaar | Elke thread |