PROBLEM SENDVIČA

Problem pripravljača sendviča temelji se na "problemu pušača cigareta" koji je prvi opisao Suhas Patil 1971 kako bi istaknuo problem sinkronizacije korištenjem semafora.

U neku trgovinu ulaze kupci koje si žele napraviti sendvič. Za napraviti sendvič te osobe trebaju kruh, šunku i sir. Svaka osoba već ima jedan sastojak i trebaju joj iduća dva. Trgovac u trgovini ima sva tri sastojka u velikoj količini. Trgovac nasumice odabire dva različita sastojka i stavlja ih na stol. Kupac koji je u trgovini i koji ima različit sastojak od onih na stolu, uzima sastojke sa stola, izlazi iz trgovine, slaže si sendvič i jede. U trgovini u svakom trenutku može biti najviše tri kupca i to s različitim sastojcima. Tek kad neki kupac izađe, u trgovinu može ući drugi, ali samo takav koji treba isti sastojak kao i ovaj koji izlazi.
Sustav se sastoji od jedne dretve/procesa trgovca i dretvi/procesa kupaca koji se dinamički stvaraju (npr. svake sekunde po jedan kupac). Zadatak je ispravno sinkronizirati procese/dretve trgovca i kupce.

 

proces/dretva Trgovac() {

   ponavljaj {

      ...

      (s1, s2) = nasumično_odaberi_dva_različita_sastojka

      stavi_sastojke_na_stol(s1, s2)

      ...

   } do ZAUVIJEK

}

 

proces/dretva Kupac(p) {

   (r1, r2) = sastojci_koji_pripravljaču_nedostaju(p)

   ...

   ako (na_stolu_su_mi_potrebni_sastojci(r1, r2) == DA) {

      uzmi_sastojke(r1, r2)

      ...

      sastavi_i_pojedi_sendvič()

      ...

   }

}

Primjer ispisa nakon pokretanja programa (to je samo primjer, ispis ne mora biti točno takav)

# ./a.out
Kupac Sendviča 1: ima kruh
Kupac Sendviča 2: ima sir
Kupac Sendviča 3: ima šunku

Trgovac stavlja: kruh i sir
Kupac Sendviča 3: uzima sastojke, izlazi iz trgovine, slaže si sendvič i jede

Trgovac stavlja: šunku i sir
Kupac Sendviča 1: uzima sastojke, izlazi iz trgovine, slaže si sendvič i jede

^C
#