Sobes.tech
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.