Різниця між Mutex та подією

Mutex vs Event

У C # існує багато різних варіантів синхронізації потоків. Два більш широко використовувані - мютекс та подія. Тільки в чому саме різниця між цими двома? Який із них кращий варіант?

Параметр події здатний надати потокам можливість блокувати, поки подія не транслюватиметься, таким чином, назва "подія". Це те саме, що укладати щось спати і пробуджувати його лише тоді, коли трапляється щось важливе. Події на відміну від мутексів, оскільки в мютексах немає опції або функції сигналізації. Події здатні очистити сигнал, як тільки хтось, хто зміг чекати на нього, прокинувся. Навіть API можуть дозволити блокувати опцію, поки не буде повідомлено про одну чи всі різні події. Крім того, події є об’єктами ядра. Вони не “легші” порівняно з мютексами. Подія - це в основному об'єкт ядра, що має два стани. Зазвичай подія сигналізує про настання події, а іноді навіть про закінчення операції вводу / виводу.

"Mutex" означає взаємне виключення. Це форма механізму координації масштабу для спільних ресурсів. Подумайте про це як про форму транзакції. Ви не зобов’язані чекати, хоча ви хочете отримати доступ до кількох спільних ресурсів (лише у випадку, коли інші вже отримують доступ до нього) ви блокуєте. Мутекс складається з двох станів, хоча існує взаємне виключення. Це для тих випадків, коли ви хочете захистити розтягнення коду, який, як правило, оновлює спільний ресурс із тієї частини, в якій заявляється mutex, до тієї частини, в якій він буде випущений. Це призводить до того, що жодна інша нитка не може пройти через секцію.

Люди, які намагалися змоделювати подію за допомогою мьютексу, мали зіткнутися з проблемою, у якій, як тільки замок придбаний або про нього було подано сигнал, людина тримає всіх інших, поки замок не буде звільнений. Це не семантика сигналу про подію. Подія може залишатися опублікованою, і форма воріт буде доступна для всіх тестувань потоків у випадку, якщо немає блокування. Mutex, прихильний до міжпроцесорної синхронізації, знаходиться в об'єкті режиму ядра. Події, зроблені для багатопотокової синхронізації за одним методом, знаходяться в об'єкті в режимі користувача.

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

Події - це більше змінна умова, на відміну від Mutex, яка більше нагадує a
слідкуйте за деякою термінологією, або це може бути традиційна форма семафору / мютексу.

Підсумок:

1. Опція події здатна дати потокам можливість блокувати до моменту трансляції події, таким чином, назва "подія".

2.У події - це в основному об'єкт ядра, що має два стани. Зазвичай подія сигналізує про настання події, а іноді навіть про закінчення операції вводу / виводу.

3. "Mutex" означає взаємне виключення. Це форма механізму координації масштабу для спільних ресурсів.

4.Mutex, прихильний до міжпроцесорної синхронізації, знаходиться в об'єкті режиму ядра. Події, зроблені для багатопотокової синхронізації за одним методом, знаходяться в об'єкті в режимі користувача.

5.Евенти - це більше змінна умова, на відміну від Mutex, яка більше нагадує a
слідкуйте за деякою термінологією, або це може бути традиційна форма семафору / мютексу.