Каковы отличия между объектами Monitor, Mutex и Semaphore в управлении множественным доступом?
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 — для ограничения количества одновременных доступов.