В чем разница между 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.