Amir228
@Amir228

В чем различие между Mutex и другими классами синх. потоков?

Зачем нужен Mutex? Есть ведь Monitor. Mutex это разве не тот же семафор, только который может брать один поток?
  • Вопрос задан
  • 353 просмотра
Пригласить эксперта
Ответы на вопрос 2
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Зачем нужен Mutex? Есть ведь Monitor.

Mutex - примитив синхронизации уровня ОС.
Monitor - инструмент синхронизации уровня среды выполнения.
Mutex это разве не тот же семафор, только который может брать один поток?

Да, по внешним признакам. Но разве не лучше выделить специфичный кейс (как например в Mutex - одновременная работа только 1 потока) и оптимизировать работу для него, а не использовать везде обощенный инструмент (возможность для нескольких потоков в семафоре). Есть разные оптимизации для него.
Ответ написан
Комментировать
vabka
@vabka Куратор тега C#
Токсичный шарпист
В отличие от Monitor, класс Mutex может использоваться для межпроцессной синхронизации. Для этого нужно использовать именованный мьютекс, который виден в операционной системе. Чтобы создать экземпляр именованного мьютекса, используйте конструктор Mutex, который задает имя. Также можно вызвать метод Mutex.OpenExisting, чтобы открыть существующий именованный системный мьютекс.

Думаю, этого достаточно для понимания различий.

Mutex это разве не тот же семафор, только который может брать один поток?

Нет, не тот же.
Как минимум, если говорить про .NET, то Mutex имеет одну фичу, которого нет у Semaphore:
Mutex можно использовать для синхронизации между процессами (при помощи именованного mutex) на Linux, а Semaphore нельзя.

На уровне ОС семафор и мутекс - это разные вещи. Предположу, что это позволяет немного оптимизировать реализацию, зная заранее, что у тебя будет только 1 поток, который его держит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы