Sobes.tech
Back to questions
Junior — Middle
73

Каковы отличия между объектами Monitor, Mutex и Semaphore в управлении множественным доступом?

Companies where asked
СБЕР ТехСБЕР Тех

Answer from AI

sobes.tech AI

Monitor, Mutex и Semaphore — это механизмы синхронизации, но они имеют разные особенности:

  • Monitor — это объект, который обеспечивает взаимное исключение (mutex) и используется для блокировки кода или объекта. В C# ключевое слово lock работает с монитором. Он позволяет одному потоку войти в критическую секцию, а другие ждут.

  • Mutex — это более тяжёлый объект синхронизации, который может использоваться для межпроцессного взаимодействия (между разными процессами), а не только внутри одного процесса. Mutex можно использовать для блокировки ресурсов на уровне ОС.

  • Semaphore — это счётчик, который позволяет ограничить количество потоков, одновременно получающих доступ к ресурсу. Например, семафор с счётчиком 3 позволит одновременно работать трём потокам.

Пример использования Monitor (lock) в C#:

private readonly object _lockObj = new object();

void CriticalSection()
{
    lock(_lockObj)
    {
        // код, который должен выполняться одним потоком
    }
}

Таким образом:

  • Monitor — для взаимного исключения внутри процесса.
  • Mutex — для взаимного исключения, включая межпроцессное.
  • Semaphore — для ограничения количества одновременных доступов.