Sobes.tech
Junior — Middle

У чему се разликују механизам међусобног искључења Lock и Semaphore у управљању приступом ресурсима?

sobes.tech АИ

Одговор од АИ

Lock (međusobno isključivanje) i Semaphore (semafor) su mehanizmi za sinhronizaciju, ali se razlikuju po funkcionalnosti i primeni:

  • Lock (Mutex)

    • Namenjen je za obezbeđivanje ekskluzivnog pristupa resursu.
    • Samo jedan tok može da poseduje Lock u datom trenutku.
    • Ako je Lock zauzet, drugi tokovi čekaju njegovo oslobađanje.
    • Koristi se za zaštitu kritičnih sekcija.
  • Semaphore

    • Ima brojač koji određuje koliko tokova može istovremeno da pristupi resursu.
    • Može dozvoliti pristup više tokova istovremeno (npr. semafor sa brojačem 3 omogućava 3 toka da pristupe istovremeno).
    • Koristi se za upravljanje pristupom ograničenim resursima.

Primer u C#:

// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // preuzimanje
// kritična sekcija
mutex.ReleaseMutex(); // oslobađanje

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // maksimalno 3 istovremena pristupa
semaphore.WaitOne();
// rad sa resursom
semaphore.Release();

Dakle, Lock je poseban slučaj semafora sa maksimalnim brojačem 1.