Junior — Middle
Kuo skiriasi tarpusavio išskyrimo Lock ir Semaphore mechanizmai valdant prieigą prie išteklių?
sobes.tech AI
Atsakymas iš AI
Lock (tarpusavio išskyrimas) ir Semaphore (semaforas) yra sinchronizacijos mechanizmai, tačiau jie skiriasi funkcionalumu ir taikymu:
-
Lock (Mutex)
- Sukurtas užtikrinti išskirtinį prieigą prie ištekliaus.
- Tik vienas srautas gali turėti Lock vienu metu.
- Jei Lock užimtas, kiti srautai laukia jo atlaisvinimo.
- Naudojamas kritinėms sekcijoms apsaugoti.
-
Semaphore
- Turi skaitiklį, kuris nustato, kiek srautų gali vienu metu pasiekti išteklių.
- Gali leisti keliems srautams naudotis ištekliu vienu metu (pavyzdžiui, semaforas su skaitikliu 3 leidžia 3 srautams naudotis ištekliu vienu metu).
- Naudojamas ribotų išteklių prieigos valdymui.
Pavyzdys C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // įsigijimas
// kritinė sekcija
mutex.ReleaseMutex(); // atlaisvinimas
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maksimaliai 3 vienu metu
semaphore.WaitOne();
// darbui su ištekliu
semaphore.Release();
Taigi, Lock yra tam tikras semaforo atvejis su maksimaliu skaitikliu 1.