Sobes.tech
Junior — Middle

Care este diferența dintre mecanismul de excludere mutuală Lock și Semaphore în gestionarea accesului la resurse?

sobes.tech AI

Răspuns de la AI

Lock (excludere mutuală) și Semaphore (semafor) sunt mecanisme de sincronizare, dar diferă în funcționalitate și aplicare:

  • Lock (Mutex)

    • Conceput pentru a asigura accesul exclusiv la o resursă.
    • Doar un fir de execuție poate deține Lock-ul într-un moment dat.
    • Dacă Lock-ul este ocupat, alte fire de execuție așteaptă eliberarea sa.
    • Folosit pentru protejarea secțiunilor critice.
  • Semaphore

    • Are un contor care determină câte fire de execuție pot accesa simultan resursa.
    • Poate permite accesul mai multor fire de execuție în același timp (de exemplu, un semafor cu contor 3 permite 3 fire de execuție simultan).
    • Folosit pentru gestionarea accesului la resurse limitate.

Exemplu în C#:

// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // preluare
// secțiune critică
mutex.ReleaseMutex(); // eliberare

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maxim 3 accesări simultane
semaphore.WaitOne();
// lucru cu resursa
semaphore.Release();

Prin urmare, Lock este un caz particular de semafor cu un contor maxim de 1.