» »

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?

seto03 ::

a lahko poveš kako si naredil prvi del naloge?..ko je potrebno spremeniti shm1a in shm1b?

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kako narediti request z "\" v URL-ju

Oddelek: Programiranje
172016 (1291) Horejšio
»

Niti - segmentation fault

Oddelek: Programiranje
211857 (704) galu
»

[C] Sinhronizacija procesov

Oddelek: Programiranje
71035 (908) Cvenemir
»

skupni pomnilnik © linux

Oddelek: Programiranje
62400 (2246) Keki
»

Prosim za ocenitev kište.

Oddelek: Strojna oprema
241954 (1479) xabre

Več podobnih tem