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.