Junior — Middle
Kādas ir atšķirības starp savstarpējas izslēgšanas Lock un Semaphore mehānismiem resursu piekļuves pārvaldībā?
sobes.tech AI
Atbilde no AI
Lock (savstarpēja izslēgšana) un Semaphore (semaforu) ir sinhronizācijas mehānismi, bet tie atšķiras pēc funkcionalitātes un pielietojuma:
-
Lock (Mutex)
- Izstrādāts, lai nodrošinātu ekskluzīvu piekļuvi resursam.
- Tik viens pavedienis var vienlaikus piederēt Lock.
- Ja Lock ir aizņemts, citi pavedieni gaida tā atbrīvošanu.
- Izmanto kritisko sekciju aizsardzībai.
-
Semaphore
- Tam ir skaitītājs, kas nosaka, cik pavedieni vienlaikus var piekļūt resursam.
- Var ļaut vairākām pavedieniem vienlaikus piekļūt (piemēram, semafors ar skaitītāju 3 ļauj 3 pavedieniem darboties vienlaikus).
- Izmanto ierobežotu resursu piekļuves pārvaldībai.
Piemērs C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // iegūšana
// kritiskā sekcija
mutex.ReleaseMutex(); // atbrīvošana
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maksimāli 3 vienlaikus
semaphore.WaitOne();
// darbs ar resursu
semaphore.Release();
Tādējādi Lock ir īpašs semafora gadījums ar maksimālo skaitītāju 1.