You are on page 1of 4

ПИТЕРСОНОВ АЛГОРИТАМ И

ЛАМПОРТОВ (ПЕКАРСКИ) АЛГОРИТАМ


ПИТЕРСОНОВ АЛГОРИТАМ

• Основна идеја је у томе када процес најави да жели да уђе у критичну


секцију, „џентлменски“ уступа предност другом процесу.
• Ова предност важи само уколико и други процес жели да уђе у критичну
секцију, а у супротном први процес не чека други, већ одмах иде у критичну
секцију.
• Овим је обезбеђено
Proces 1: Proces 2:
да процеси zeli_proces_1 = 1; zeli_proces_2 = 1;
наизменично улазе у na_redu = 2; na_redu = 1;
критичну секцију ако WHILE(zeli_proces_2 == 1 AND WHILE(zeli_proces_1 == 1 AN
то желе у исто време, na_redu == 2) D
без обзира на њихову //Aktivno čekanje na_redu == 1)
брзину. ENDWHILE //Aktivno čekanje
• Мана овог алгоритма //Kritična sekcija ENDWHILE
је да је применљив zeli_proces_1 = 0; //Kritična sekcija
само за два процеса. zeli_proces_2 = 0;
ЛАМПОРТОВ (ПЕКАРСКИ) АЛГОРИТАМ

• Уопштење Питерсоновог алгоритма за већи број процеса представља


Лампортов алгоритам.
• Алгоритам је добио надимак јер је заснован на идеји која се ослања на
редослед опслуживања муштерија у пекари.
• Кад уђе у пекару, муштерија добија број који је већи од бројева које су
добиле претходне муштерије.
• Муштерије се услужују редом, почев од оних са најмањим бројем.
ЛАМПОРТОВ (ПЕКАРСКИ) АЛГОРИТАМ

Proces i:
//Zaštita uzimanja broja
uzima[i] = 1;
• Затим се редом у ФОР петљи broj[i] = max(broj[0], …, broj[n – 1]) + 1;
обилазе сви процеси, а процес i uzima[i] = 0;
чека да са извршавањем у критичној //Glavna petlja koja je graničnik kritične sekcije
секцији заврше процеси који имају FOR (j = 0; j < n; j++)
бољи број од њега (тј мањи). WHILE (uzima[j] == 1)
//Aktivno čekanje da j-ti proces dobije broj
ENDWHILE
• Ово решење ради за произвољан број WHILE (broj[j] != 0 AND (broj[j], j) < (broj[i], i))
процеса, задовољена су сва три //Aktivno čekanje da proces koji ima prednost završi
услова за добро решење. ENDWHILE
ENDFOR
//Kritična sekcija
• Може да ради и на системима са broj[i] = 0;
више процесора.

You might also like