«« ( Date ) »» // «« ( Thread ) »» // drs - 2006

za asistenta u vezi zadataka

by Ivana Jeremic
četvrtak, 23. novembar 2006 - 10:41.

Imam par pitanja u vezi zadataka sa vezbi (Vezbe2006_V4.2.pdf) :

1) zadatak 6. - U zadatku je receno:
"...различити потрошачи могу у исто време да узимају различите приозводе."
U prilozenom resenju to nije omoguceno, jer se nigde ne proverava koje polje
bafera consumer zeli da uzme vec se odmah blokira.
Da li bi trebalo da bude:

*program *AtomicBroadcastB;

...

*var *mutexBuffer : array[1..B] of *se**maphore*;

...

*procedure *Consumer(ID : *integer*);

*var *item : *integer*;

*begin*

*while *(*true*) *do*

*begin*

*wait*(full[ID]);

*wait*(mutexBuffer[readFromIndex[ID]]);

item := buffer[readFromIndex[ID]];

get_item(item, ID);

num[readFromIndex[ID]] := num[readFromIndex[ID]] + 1;

*if *(num[readFromIndex[ID]] = N) *then*

*begin*

signal(empty);

num[readFromIndex[ID]] := 0;

*end*;

*signal*(mutexBuffer[readFromIndex[ID]]);

*if *(readFromIndex[ID] = B) *then *readFromIndex[ID] := 1

*else *readFromIndex[ID] := readFromIndex[ID] + 1;

consume_item(item);

*end*;

*end*;

i da signal stoji pre if-bloka (samo proces ID moze da pristupi polju

*program *AtomicBroadcastB;

...

*var *mutexBuffer : array[1..B] of *se**maphore*;

...

*procedure *Consumer(ID : *integer*);

*var *item : *integer*;

*begin*

*while *(*true*) *do*

*begin*

*wait*(full[ID]);

*wait*(mutexBuffer[readFromIndex[ID]]);

item := buffer[readFromIndex[ID]];

get_item(item, ID);

num[readFromIndex[ID]] := num[readFromIndex[ID]] + 1;

*if *(num[readFromIndex[ID]] = N) *then*

*begin*

signal(empty);

num[readFromIndex[ID]] := 0;

*end*;

*signal*(mutexBuffer[readFromIndex[ID]]);

*if *(readFromIndex[ID] = B) *then *readFromIndex[ID] := 1

*else *readFromIndex[ID] := readFromIndex[ID] + 1;

consume_item(item);

*end*;

*end*;
i da li sme signal da stoji ispred if-bloka(samo proces ID sme da pristupi
polju
readFromIndex[ID])?

2) zadatak 9. - Da li je moguce da se u procedure Oxygen izostave
wait(oxyMutex) i signal(oxyMutex) posto se medjusobno iskljucivanje oxigen-a
ostvaruje vec sa oxySem ili ipak nije moguce jer oxySem ne bi uvek
obezbedjivalo medjusobno iskljucivanje?



*procedure Oxygen(i : integer);*

*begin*

*signal (hydroSem);*

*signal (hydroSem);*

*// wait (oxyMutex);*

*wait (oxySem);*

*bond (i);*

*// signal (oxyMutex);*

*end*

Hvala na odgovorima!

Pozdrav Ivana