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

Опитвам се да разбера концепциите на семафорите, имам следната част от кода. Първоначално Semaphore mutex се инициализира на 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. Обикновено бихте използвали заключване ако искате взаимно изключване.

Напредъкът не означава непременно удовлетворение. Зависи дали изпълнението на семафора гарантира справедливост. При някои операционни системи, като се имат предвид две нишки с висок приоритет и една с по-нисък приоритет, е възможно нишката с нисък приоритет да бъде лишена.

Проблемът с ограничен буфер не е удовлетворен, но това, което показвате, не е производител- потребителска програма.

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