В чем разница между AutoResetEvent и Mutex
Я новичок в этих понятиях. Но по мере того, как я углубляюсь в threading
, я сбиваюсь с толку.
Каково значение mutex
, semaphore
над autoresetevent
.
Единственное отличие, которое я узнал в исследованиях, - это то, что mutex
может выполнять операции процесса. Если это так, то у него нет такого метода, как Set
, Reset
, WaitOne
.
Можно ли заменить autoresetevent
на mutex
и наоборот?
Решите эту головоломку.
Ответы
Ответ 1
Другая концепция - a Mutex
- это эксклюзивный токен; это может иметь только один человек; когда они освобождают его, кто-то другой может сражаться с ним. AutoResetEvent
- это затвор, который позволяет закрывать только одного человека и который управляется кнопкой, которая отделена от очереди людей, желающих пройти. Когда они проходят через ворота, немедленно закрывается.
Ответ 2
Это зависит.
Как правило, AutoResetEvent и Mutex могут быть заменены, AutoResetEvent.WaitOne = Mutex.WaitOne и AutoResetEvent.Set = Mutex.ReleaseMutex.
Но они разные. Вы можете упомянуть, что Mutex имеет "Release", что означает, что вы можете "получить" что-то, вызывая "WaitOne". То, что вы можете получить, связано с вызывающим потоком.
Вы можете вызвать AutoResetEvent.Set в любом потоке. Но вы можете вызвать Mutex.ReleaseMutex только из потока, который называется Mutex.WaitOne, и получить в качестве результата значение true.