za asistenta u vezi zadataka
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
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
- Follow-Ups:
- Re: za asistenta u vezi zadataka
- From: Zaharije Radivojevic <zaki@galeb.etf.bg.ac.yu>
- Re: za asistenta u vezi zadataka
Previous by date: Re: za asistenta
Next by date: Re: za asistenta u vezi zadataka
Previous by thread: Re: Pad stanice Next by thread: Re: za asistenta u vezi zadataka
Previous by thread: Re: Pad stanice Next by thread: Re: za asistenta u vezi zadataka