Защо Pthread_cond_wait се нуждае от мютекс?
Защо Pthread_cond_wait се нуждае от мютекс?

Видео: Защо Pthread_cond_wait се нуждае от мютекс?

Видео: Защо Pthread_cond_wait се нуждае от мютекс?
Видео: Кто-нибудь из вас слышал о полуночной игре? Страшные истории. Мистика. Ужасы 2024, Може
Anonim

В мютекс се използва за защита на самата променлива на условието. Ето защо ти трябва заключи се пред теб направи изчакване. След това, когато променливата на условието бъде сигнализирана или излъчвана към, една или повече от нишките в списъка на чакащите ще бъдат събудени и мютекс ще бъде магически заключен отново за тази тема.

По отношение на това, Pthread_cond_wait отключва ли мютекса?

В pthread_cond_wait () функцията блокира извикващата нишка на променливата на условието cond и отключва асоциираните мютекс мютекс . Извикващата нишка трябва да е заключена мютекс преди да изчакате променливата на условието. При връщане от функцията, мютекс отново е заключен и притежаван от извикващата нишка.

Впоследствие въпросът е защо е необходим мютекс? Той гарантира, че само една нишка изпълнява ключова част от кода в даден момент, което от своя страна ограничава достъпа до структура от данни. Той гарантира, че и двете нишки имат пълен и правилен изглед на тази памет, независимо от пренареждане на процесора. В мютекс е абсолютна необходимост при едновременното програмиране.

Освен това по-горе, защо променливите на условието се нуждаят от мютекс?

В мютексът е използвани за защита на променлива на състоянието себе си. Ето защо ти трябва заключи се пред теб направи изчакване. Тогава, когато променливата на състоянието е сигнализирани или излъчвани до една или повече от нишките в списъка на чакащите ще бъдете събудени и mutex ще бъде магически заключен отново за тази тема.

Защо се нуждаем от променливи за условия?

Условни променливи оставете набор от нишки да спи до гъделичкане! Можете да гъделичкате една нишка или всички нишки, които спят. Ако събудите само една нишка, тогава операционната система ще реши коя нишка да се събуди.

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