Forum » Programiranje » Semaforji C v linuxu
Semaforji C v linuxu
f1ghter4 ::
Lp. Rabil bi pomoč. Prejšni teden smo na faxu morali nalogo z spinlock oz.vrtavki, kjer se izvaja prazna while zanka, dokler je vrednost skupnega pomnilnika enaka 0.
Sedaj pa moramo to isto nalogo narediti s semaforji. Navodilo je sledeče:
Nalogo iz prejšnjega tedna (spinlock oz. vrtavka) dopolnite tako:
shm1a:
program shm1a ustvari še en skupen pomnilnik, ki bo sprejel niz dolg 20 znakov,
nato v vrtavki "počaka", da mu proces shm1b sporoči, da je napolnil drugi skupni pomnilnik s "pametnimi" podatki,
preden se zaključi, izpiše na zaslon podatke iz drugega skupnega pomnilnika.
shm1b:
poveže se na nov skupni pomnilnik in ga napolni z razumljivimi podatki (niz naj bo dolg cca 20 znakov, kot je velik skupni pomnilnik),
"sporoči" prejšnjemu procesu, da je končal z operacijo (ostane enako kot prejšnji teden).
Nato ponovno napišite dva programa (shm2a in shm2b), kjer popolnoma enak problem rešite s pomočjo semaforja. Namig: prvi (signalni) skupni pomnilnik in vrtavko nadomestite s semaforjem.
Navodila: ob zaganjanju procesov imejte v dodatnem terminalu zagnan proces top in opazujte razliko:
najprej zaženite ukaz top,
nato zaženite shm1a ali shm2a,
nekaj trenutkov opazujte izpise ukaza top,
zaključite delovanje programa z zagonom shm1b oz. shm2b.
Sedaj sem naletel na problem. Ko zazenem top in pozneje ./shm1a se mi ta normalno prikaze v top in izgine ko pozenem ./shm1b . Ko pa zazenem ./shm2a, katera mora vsebovati semafor pa se mi ta ne prikaze v top, v ipcs -s ukazu pa mi prikaze, da sem ustvaril semafor. Sedaj nevem ali to deluje prav ali ne?
Sedaj pa moramo to isto nalogo narediti s semaforji. Navodilo je sledeče:
Nalogo iz prejšnjega tedna (spinlock oz. vrtavka) dopolnite tako:
shm1a:
program shm1a ustvari še en skupen pomnilnik, ki bo sprejel niz dolg 20 znakov,
nato v vrtavki "počaka", da mu proces shm1b sporoči, da je napolnil drugi skupni pomnilnik s "pametnimi" podatki,
preden se zaključi, izpiše na zaslon podatke iz drugega skupnega pomnilnika.
shm1b:
poveže se na nov skupni pomnilnik in ga napolni z razumljivimi podatki (niz naj bo dolg cca 20 znakov, kot je velik skupni pomnilnik),
"sporoči" prejšnjemu procesu, da je končal z operacijo (ostane enako kot prejšnji teden).
Nato ponovno napišite dva programa (shm2a in shm2b), kjer popolnoma enak problem rešite s pomočjo semaforja. Namig: prvi (signalni) skupni pomnilnik in vrtavko nadomestite s semaforjem.
Navodila: ob zaganjanju procesov imejte v dodatnem terminalu zagnan proces top in opazujte razliko:
najprej zaženite ukaz top,
nato zaženite shm1a ali shm2a,
nekaj trenutkov opazujte izpise ukaza top,
zaključite delovanje programa z zagonom shm1b oz. shm2b.
Sedaj sem naletel na problem. Ko zazenem top in pozneje ./shm1a se mi ta normalno prikaze v top in izgine ko pozenem ./shm1b . Ko pa zazenem ./shm2a, katera mora vsebovati semafor pa se mi ta ne prikaze v top, v ipcs -s ukazu pa mi prikaze, da sem ustvaril semafor. Sedaj nevem ali to deluje prav ali ne?
f1ghter4 ::
Dodati moraš še en kazalec, ki pošilja podatke(niz 20 besed) v skupni pomnilnik oz. polni skupni pomnilnik. Ko zaženeš ukaz TOP ti mora proces shm1a v parih sekundah pridit na 100%. Vsaj men tak dela, nisem pa siguren če je prav ;)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Kako narediti request z "\" v URL-juOddelek: Programiranje | 2140 (1415) | Horejšio |
» | Niti - segmentation faultOddelek: Programiranje | 1973 (820) | galu |
» | [C] Sinhronizacija procesovOddelek: Programiranje | 1138 (1011) | Cvenemir |
» | skupni pomnilnik © linuxOddelek: Programiranje | 2477 (2323) | Keki |
» | Prosim za ocenitev kište.Oddelek: Strojna oprema | 2031 (1556) | xabre |