Мьютекс и событие

Anonim

Mutex против события

В C # существует множество вариантов синхронизации потоков. Двумя более широко используются мьютексы и события. В чем же разница между этими двумя? Какой вариант лучше?

Опция события может дать потокам возможность блокировать до тех пор, пока событие не будет передано, таким образом, имя «событие». Это то же самое, что положить что-то спать и только просыпать его, когда что-то имеет значение. События не похожи на мьютексы, поскольку мьютексы не имеют опции или функции сигнализации. События могут очистить сигнал, когда кто-то, кто смог дождаться, проснулся. Даже API-интерфейсы могут разрешить блокировку до тех пор, пока не будет сигнализировано одно или все разные события. Кроме того, события являются объектами ядра. Они не «легче» по сравнению с мьютексами. Событие - это в основном объект ядра, состоящий из двух состояний. Обычно событие сигнализирует о приходе события, а иногда и о конце операции ввода-вывода.

«Мьютекс» означает «Взаимное исключение». Это форма скоординированного механизма координации ресурсов. Думайте об этом как о форме транзакции. Вы не обязаны ждать, хотя вы хотите получить доступ к нескольким общим ресурсам (только в том случае, если другие пользователи уже обращаются к нему) вы блокируете. Мьютекс состоит из двух состояний, хотя он существует, чтобы ввести в действие взаимное исключение. Это происходит, когда вы хотите защитить фрагмент кода, который обычно обновляет общий ресурс от той части, в которой мьютекс претендует на часть, в которой он будет выпущен. Это приводит к тому, что никакая другая нить не может проходить через этот раздел.

Люди, которые пытались имитировать событие с помощью мьютекса, должны были столкнуться с проблемой, когда, как только блокировка была получена или событие было сигнализировано, человек удерживает всех остальных до освобождения блокировки. Это не семантика события, которое сигнализируется. Событие может оставаться в курсе, и форма ворот будет доступна для всего тестирования потоков в случае отсутствия каких-либо блокировок. Mutex, выполняемый для межпроцессной синхронизации, находится в объекте режима ядра. События, выполненные для многопоточной синхронизации по одному методу, относятся к объекту пользовательского режима.

Объект Mutex слишком тяжелый и слишком общий. Объекты событий намного легче. Синхронизация в режиме пользователя используется в большинстве ситуаций из-за того, что она дает меньше циклов ЦП. Mutex очень похож на критический раздел и используется для синхронизации доступа к совместно используемым ресурсам. События имеют совершенно другую функцию, потому что они используются для синхронизации задач или для управления планированием задач для некоторых людей.

События - это скорее переменная условия, в отличие от Mutex, которая больше похожа на монитор в некоторой терминологии, или это может быть традиционная форма семафора / мьютекса.

Резюме:

Опция события 1.The позволяет давать потокам возможность блокировать до тех пор, пока событие не будет транслироваться, таким образом, имя «событие».

Событие 2.An в основном является объектом ядра, имеющим два состояния. Обычно событие сигнализирует о приходе события, а иногда и о конце операции ввода-вывода.

3. «Мьютекс» означает «Взаимное исключение». Это форма скоординированного механизма координации ресурсов.

4.Mutex, выполняемый для межпроцессной синхронизации, находится в объекте режима ядра. События, выполненные для многопоточной синхронизации по одному методу, относятся к объекту пользовательского режима.

5.Events - это скорее переменная условия, в отличие от Mutex, которая больше похожа на монитор в некоторой терминологии, или это может быть традиционная форма семафора / мьютекса.