Sobes.tech
Junior — Middle

Mi a különbség a Lock és Semaphore kölcsönös kizárási mechanizmusok között az erőforrásokhoz való hozzáférés kezelésében?

sobes.tech MI

Válasz az MI-től

Lock (kölcsönös kizárás) és Semaphore (szemafor) szinkronizációs mechanizmusok, de funkcióban és alkalmazásban különböznek:

  • Lock (Mutex)

    • Kizárólagos hozzáférést biztosít egy erőforráshoz.
    • Csak egy szál lehet egyszerre a Lock tulajdonosa.
    • Ha a Lock foglalt, más szálak várakoznak a felszabadítására.
    • Kritikus szekciók védelmére használják.
  • Semaphore

    • Számlálóval rendelkezik, amely meghatározza, hány szál fér hozzá egyszerre az erőforráshoz.
    • Több szálat is engedélyezhet egyszerre (pl. egy 3-as számlálós szemafor lehetővé teszi 3 szálnak a párhuzamos hozzáférést).
    • Korlátozott erőforrások kezelésére használják.

Példa C#-ban:

// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // megszerzés
// kritikus szekció
mutex.ReleaseMutex(); // felszabadítás

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maximum 3 párhuzamos hozzáférés
semaphore.WaitOne();
// erőforrással való munka
semaphore.Release();

Tehát, a Lock egy speciális eset a szemaforok közül, maximális számlálója 1.