Sobes.tech
Назад к вопросам
Middle
6

Назови примитивы синхронизации и кратко опиши принципы их работы.

Компании, где спрашивали
OZONOZON

Ответ от нейросети

sobes.tech AI

В C# есть несколько примитивов синхронизации, которые позволяют управлять доступом к общим ресурсам:

  • lock (Monitor)

    • Обеспечивает эксклюзивный доступ к блоку кода.
    • Использует объект в качестве ключа.
    • Пример:
      lock(obj) {
          // критическая секция
      }
      
  • Mutex

    • Межпроцессный примитив.
    • Позволяет синхронизировать доступ между разными процессами.
    • Более тяжёлый, чем lock.
  • Semaphore / SemaphoreSlim

    • Позволяет ограничить количество потоков, одновременно выполняющих определённый участок кода.
    • SemaphoreSlim — более лёгкая версия для одного процесса.
  • AutoResetEvent / ManualResetEvent

    • Используются для сигнализации между потоками.
    • AutoResetEvent автоматически сбрасывается после пробуждения одного потока.
    • ManualResetEvent остаётся установленным, пока не сброшен вручную.
  • Interlocked

    • Предоставляет атомарные операции над переменными (например, инкремент, сравнение и обмен).
    • Используется для реализации lock-free алгоритмов.

Принцип работы:

  • lock/Monitor блокирует поток, если ресурс занят, и разблокирует после выхода из блока.
  • Mutex похож на lock, но работает и между процессами.
  • Semaphore позволяет нескольким потокам одновременно входить, но ограничивает их число.
  • Event используется для уведомления потоков о наступлении события.
  • Interlocked обеспечивает атомарность операций без блокировок.