Sobes.tech
Junior — Middle

Каква е разликата между механизма за взаимно изключване Lock и Semaphore при управлението на достъпа до ресурси?

sobes.tech AI

Отговор от AI

Lock (взаимно изключване) и Semaphore (семафор) са механизми за синхронизация, но се различават по функционалност и приложение:

  • Lock (Mutex)

    • Предназначен е за осигуряване на ексклузивен достъп до ресурс.
    • Само един поток може да притежава Lock в даден момент.
    • Ако Lock е зает, други потоци чакат освобождаването му.
    • Използва се за защита на критични секции.
  • Semaphore

    • Има брояч, който определя колко потоци могат едновременно да имат достъп до ресурса.
    • Може да разрешава достъп на няколко потока едновременно (например, семафор с брояч 3 позволява на 3 потока да работят едновременно).
    • Използва се за управление на достъпа до ограничени ресурси.

Пример на C#:

// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // вземане
// критична секция
mutex.ReleaseMutex(); // освобождаване

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // максимум 3 едновременно достъпа
semaphore.WaitOne();
// работа с ресурса
semaphore.Release();

Така Lock е частен случай на семафор с максимален брояч 1.