Napisati program koji stvara ukupno tri dretve u dva procesa (jedan proces
ima dvije, a drugi jednu dretvu). Prva dretva je ulazna dretva i ona svakih
jednu do pet sekundi generira nasumičan broj između 1 i 100 koji upisuje u
zajedničku varijablu koju dijeli s radnom dretvom. Radna dretva čita taj broj,
povećava ga za jedan i rezultat upisuje u drugu zajedničku varijablu s izlaznom
dretvom. Izlazna dretva pročita taj broj i zapisuje ga u datoteku. Broj
nasumičnih brojeva koje generira ulazna dretva zadaje se kao argument prilikom
poziva glavnog programa. Sinkronizaciju obaviti radnim čekanjem na način da
radna dretva čeka kada je upisana vrijednost 0 u zajedničkoj varijabli za ulaznu
i radnu dretvu, ulazna dretva radno čeka kada je taj broj različit od 0. Na
jednak način sinkronizirati radnu i izlaznu dretvu drugom zajedničkom
varijablom.
a) Studenti čija je zadnja znamenka JMBAG-a parna trebaju napisati program u
kojem jedan od dva procesa ima dvije dretve: ulaznu i radnu, a drugi proces samo
izlaznu dretvu.
b) Studenti čija je zadnja znamenka JMBAG-a neparna trebaju napisati program u
kojem jedan od dva procesa ima jednu dretvu i to ulaznu, a drugi proces dvije
dretve: radnu i izlaznu.
Uputa: Dretve istog procesa komuniciraju i sinkroniziraju se preko zajedničke
globalne varijable unutar tog procesa, dok dretve različitih procesa
komuniciraju preko zajedničke memorije koju treba stvoriti na početku izvođenja
programa.
Sve što nije zadano u tekstu zadatka riješiti na proizvoljan način.
$ ./a.out 2
Pokrenuta RADNA DRETVA
Pokrenut IZLAZNI PROCES
Pokrenuta ULAZNA DRETVA
ULAZNA DRETVA: broj 57
RADNA DRETVA: pročitan broj 57 i povećan na 58
IZLAZNI PROCES: broj upisan u datoteku 58
ULAZNA DRETVA: broj 80
RADNA DRETVA: pročitan broj 80 i povećan na 81
IZLAZNI PROCES: broj upisan u datoteku 81
Završila RADNA DRETVA
Završila ULAZNA DRETVA
Završio IZLAZNI PROCES
Ispis izlazne datoteke:
$ cat ispis.txt
58
81