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.