Junior — Middle
V čem se liší mechanismus vzájemného vyloučení Lock a Semaphore při řízení přístupu k prostředkům?
sobes.tech AI
Odpověď od AI
Lock (vzájemné vyloučení) a Semaphore (semafor) jsou mechanismy synchronizace, ale liší se ve funkčnosti a použití:
-
Lock (Mutex)
- Navržen tak, aby zajišťoval exkluzivní přístup ke zdroji.
- Pouze jeden vlákno může vlastnit Lock v daném okamžiku.
- Pokud je Lock obsazen, ostatní vlákna čekají na jeho uvolnění.
- Používá se k ochraně kritických sekcí.
-
Semaphore
- Má čítač, který určuje, kolik vláken může současně získat přístup ke zdroji.
- Může povolit přístup více vláknům najednou (například semaphore s čítačem 3 umožňuje 3 vlákna současně).
- Používá se k řízení přístupu k omezeným zdrojům.
Příklad v C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // získání
// kritická sekce
mutex.ReleaseMutex(); // uvolnění
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maximálně 3 současné přístupy
semaphore.WaitOne();
// práce se zdrojem
semaphore.Release();
Tedy, Lock je speciální případ semaforu s maximálním čítačem 1.