Mutex срещу Event
В C # има много различни опции за синхронизация на резбата. Двете по-широко използвани са мутекс и събитие. Само каква точно е разликата между тези две? Кой е по-добрият вариант?
Опцията събитие е в състояние да даде на нишките опцията да се блокира, докато не се излъчи събитие, като по този начин името „събитие“. Това е същото като да сложите нещо за сън и само да го събудите, когато се случи нещо от значение. Събитията са за разлика от mutex, защото mutex не разполагат с опция или функция за сигнализиране. Събитията са в състояние да изчистят сигнала, след като някой се е събудил на него. Дори API-ът е в състояние да позволи опцията да се блокира, докато не се сигнализира едно или всички различни събития. В допълнение, събитията са обекти на ядрото. Те не са „по-леки“ в сравнение с мютекси. Събитието е в основата на обект на ядрото, което има две състояния. Обикновено едно събитие сигнализира за настъпването на събитие, а понякога дори и за края на I / O операцията.
„Mutex“ означава взаимно изключване. Това е форма на механизъм за координация на обхвата на ресурсите, които се споделят. Мислете за това като за форма на транзакция. Не сте длъжни да чакате, въпреки че искате да получите достъп до няколко споделени ресурси (само в случай, че други вече имат достъп до него) блокирате. Мутексът се състои от две състояния, въпреки че съществува, за да въведе взаимно изключване. Това е така, когато искате да защитите участък от код, който обикновено актуализира споделен ресурс от частта, в която мутексът е заявен, до частта, в която ще бъде издаден. Това води до факта, че никоя друга нишка не може да премине през секцията.
Хората, които са се опитали да симулират събитие с помощта на мютекс, трябваше да се сблъскат с проблема, при който веднага след като ключалката е придобита или събитието е сигнализирано, човекът държи всички останали нагоре, докато бравата не бъде освободена. Това не е семантиката на сигнализирано събитие. Събитие може да остане публикувано и форма на порта ще бъде налична за всички тестове на нишката в случай, че няма заключване. Mutex, ангажиран с междупроцесовата синхронизация, е в обект в режим на ядро. Събитията, направени за многопоточна синхронизация по един метод, са в обект в потребителски режим.
Обектът Mutex е твърде тежък и твърде общ. Обектите на събитията са много по-леки. Синхронизирането в потребителски режим се използва в повечето ситуации поради причината, че дава по-малко цикли на процесора. Mutex много прилича на критичен раздел и се използва за синхронизиране на достъпа до ресурси, които се споделят. Събитията имат съвсем различна функция, тъй като се използват за синхронизиране на задачи или за управление на планирането на задачи за някои хора.
Събитията са по-скоро променлива условие, за разлика от Mutex, който е по-скоро като a
следете в някои от терминологията, или това може да бъде традиционна форма на семафор / мютекс.
Резюме:
1.Опцията за събитие е в състояние да даде на нишките опцията да блокира, докато не се излъчи събитие, като по този начин името „събитие“.
2.Всеки случай е основно ядро, имащо две състояния. Обикновено едно събитие сигнализира за настъпването на събитие, а понякога дори и за края на I / O операцията.
3. „Mutex“ означава взаимно изключване. Това е форма на механизъм за координация на обхвата на ресурсите, които се споделят.
4.Mutex, ангажиран с междупроцесовата синхронизация, е в обект в режим на ядрото. Събитията, направени за многопоточна синхронизация по един метод, са в обект в потребителски режим.
5.Евентите са по-скоро променлива условие, за разлика от Mutex, който е по-скоро като a
следете в някои от терминологията, или това може да бъде традиционна форма на семафор / мютекс.