Решение критической секции для N процессов с использованием семафоров

Я пытаюсь понять концепции семафоров, у меня есть следующий фрагмент кода. Первоначально мьютекс семафора инициализируется до 1

 Structure of Pi;
do{
wait(mutex);
Critical Section
signal(mutex);
Remainder section
}
while(1);

Принимая во внимание N процессов, обеспечивает ли приведенный выше алгоритм хорошее решение проблемы критической секции?

Мое наблюдение состоит в том, что первые два условия, то есть взаимное исключение и прогресс, выполняются, но не ограниченный буфер. Это правильно?


person Faizan    schedule 03.11.2013    source источник


Ответы (1)


Взаимное исключение выполняется, если максимальное количество семафоров равно 1. Обычно вы должны использовать блокировку если вы хотите взаимное исключение.

Прогресс не обязательно означает удовлетворение. Это зависит от того, гарантирует ли реализация семафора справедливость. В некоторых операционных системах при наличии двух потоков с высоким приоритетом и одного с более низким приоритетом поток с низким приоритетом может оказаться голодным.

Проблема ограниченного буфера не решается, но то, что вы показываете, не является producer- потребительская программа.

person Jim Mischel    schedule 06.11.2013
comment
Если и блокировка, и семафоры обеспечивают взаимное исключение, чем они отличаются? - person Faizan; 07.11.2013
comment
@Faizan: см. en.wikipedia.org/wiki/ - person Jim Mischel; 07.11.2013