Sobes.tech
Back to questions
Junior — Middle
63

Чем отличаются механизм взаимного исключения Lock и Semaphore при управлении доступом к ресурсам?

Companies where asked
appfox

Answer from AI

sobes.tech 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.