Назад к вопросам
OZON
Middle
6
Назови примитивы синхронизации и кратко опиши принципы их работы.
Компании, где спрашивали
Ответ от нейросети
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 обеспечивает атомарность операций без блокировок.