Разлика между Semaphore и Mutex

Разлика между Semaphore и Mutex
Разлика между Semaphore и Mutex

Видео: Разлика между Semaphore и Mutex

Видео: Разлика между Semaphore и Mutex
Видео: Что такое mutex | Cинхронизация потоков | Многопоточное программирование | C++ #6 2024, Ноември
Anonim

Семафор срещу Mutex

Семафорът е структура от данни, която се използва, за да се гарантира, че множество процеси нямат достъп до общ ресурс или критична секция по едно и също време в среди за паралелно програмиране. Семафорите се използват за избягване на мъртви ключалки и състезателни условия. Mutex (Обект за взаимно изключване) също се използва за избягване на достъп до общ ресурс едновременно от няколко едновременни процеса.

Какво е семафор?

Семафорът е структура от данни, която се използва за осигуряване на взаимно изключване на критични секции. Семафорите поддържат главно две операции, наречени изчакване (исторически известно като P) и сигнал (исторически известно като V). Операцията за изчакване блокира процес, докато семафорът е отворен и операцията за сигнал позволява на друг процес (нишка) да влезе. Всеки семафор е свързан с опашка от чакащи процеси. Когато операцията за изчакване се извика от нишка, ако семафорът е отворен, нишката може да продължи. Ако семафорът е затворен, когато операцията за изчакване е извикана от нишка, нишката е блокирана и трябва да чака в опашката. Операцията на сигнала отваря семафор и ако има нишка, която вече чака в опашката, този процес може да продължи и ако няма нишки, чакащи в опашката, сигналът се запомня за следващите нишки. Има два типа семафори, наречени мютекс семафори и семафори за броене. Mutex семафорите позволяват единичен достъп до ресурс, а броящите семафори позволяват на множество нишки да имат достъп до ресурс (който има няколко налични единици).

Какво е Mutex?

Когато се стартира компютърно приложение, то ще създаде mutex и ще го прикачи към ресурс. Когато ресурсът се използва от нишка, той е заключен и други нишки не могат да го използват. Ако друга нишка иска да използва същия ресурс, тя ще трябва да направи заявка. След това тази нишка ще бъде поставена в опашка, докато първата нишка приключи с ресурса. Когато първата нишка приключи с ресурса, заключването ще бъде премахнато и нишката, която чака в опашката, може да получи достъп до ресурса. Ако има няколко нишки, чакащи в опашката, те получават достъп на ротационен принцип. На практика, когато mutex редува достъпа до ресурс между няколко нишки, това ще бъде видимо, тъй като множество нишки консумират ресурс едновременно. Но вътрешно само една нишка има достъп до ресурса в даден момент.

Каква е разликата между Semaphore и Mutex?

Въпреки че както семафорите, така и mutex обектите се използват за постигане на взаимно изключване в среди за паралелно програмиране, те имат някои разлики. Mutex обект позволява само на една нишка да консумира ресурс или критична секция, докато семафорите позволяват ограничен брой едновременни достъпи до ресурс (под максималния разрешен брой). С mutex обекти, други нишки, които искат достъп до ресурса, трябва да чакат в опашка, докато текущата нишка приключи с използването на ресурса.

Препоръчано: