Uzdevuma nostādne
Pieci filozofi dzīvo kopā un pārsvarā domā. Domāšanas procesu var pārtraukt tikai izsalkums. Filozofi ēd spageti, kas atrodas lielajā šķīvī uz apaļa galda. Uz galda vēl ir pieci šķīvi un piecas dakšas. Katram filozofam ir sava vieta pie galda un ēšanai viņš izmanto divas dakšas, kas atrodas blakus šķīvim.
Izstrādāt un realizēt pusdienas algoritmu, kurā ar semaforiem ir atrisināta savstarpējas izslēgšanas, sinhronizācijas un strupceļu problēmas.
Pēc apliecības numura: divi filozofi sāk pārbaudi no kreisās dakšas, pārējie trīs - no labās. Pie galda var atrasties vienlaicīgi ne vairāk kā 4 filozofi.
Izstrādāt programmu, kur filozofi ir procesi un procesu sinhronizēšanai izmanto semafora mehānismu.
Teorētiskais pamatojums
Ļoti svarīgu ieguldījumu starpprocesu komunikācijās izdarīja Deikstra, kas
piedāvāja semafora koncepciju un primitīvas operācijas wait un signal, kas ietekme uz
semaforiem.
Semafors ir īpašs datu tips, ko izmanto, lai sinhronizētu vairākus procesus, kas
izpildās vienlaicīgi. Semafors ir aizsargāts mainīgais, kuram vērtību var nolasīt un
nomainīt izmantojot specialos operācijas wait un signal un semafora inicializēšanas
komandas.
wait(S) : IF val(5)>0 THEN val(5):=val(5)-1 ELSE (gaidit uz S)
signal(S) : IF (process gaida uz S) THEN (atlauts procesa darbu turpinat) ELSE
val(5):=val(5)+1…