2011-12-28 2 views
-1

Следующий алгоритм для проблемы взаимного исключения не удовлетворяет свойству взаимного исключения. удовлетворяет ли он тупик, голод? А также правильно ли он работает в отсутствие разногласий?Критическая часть 2-я попытка?

int p=1; 
int q=1; 

process P         process Q 
while(true){         while(true){ 
a1 : nonCriticallSection1;     a2 : nonCriticallSection1; 
b1 : while (q !=1){ do nothing}    b2 : while (p !=1){ do nothing} 
c1 : p=0;         c2 : q=0; 
d1 : critical section      d2 : critical section 
e1 : p=1;         e2 : q=1; 
    }           } 
end P;          end Q; 
+1

Если это домашнее задание, добавьте тег 'homework'. Кроме того, пожалуйста, уточните свой вопрос, я не знаю, как «удовлетворить тупик». – thiton

ответ

0

Ваш алгоритм должен быть в порядке для тупика, голода и раздора.
Однако этот вид решения не является масштабируемым и будет работать только для 2 процессов, которые, вероятно, не являются тем, что вы ищете.
Вы можете посмотреть wikipedia'e entry for deadlock, чтобы найти полезный алгоритм.

EDIT: я не могу голодать, когда вы устанавливаете флаг процесса, который говорит, когда процесс хочет войти в критический раздел. Поэтому, если процесс P имеет критический раздел, но процесс Q хочет войти, он будет делать, когда P заканчивает критический раздел, потому что даже если планировщик будет выбирать повторное выполнение P, P сам проверит, будет ли q == 0, и если это так будет ждать ,
Конечно, ваш пример - это учебный корпус. Он не будет работать в реальном приложении, поскольку он использует опросы и, возможно, бесконечные циклы. Я настоятельно рекомендую не пытаться его использовать.

+0

Спасибо andreapier ... можно объяснить, как голод применим для этого алгоритма. Я не понимаю. А также алгоритм не может затормозить. не так ли? – desh

+0

Спасибо andreapier – desh

Смежные вопросы