Forum: PC-Programmierung Semaphoren und Bounded Buffer


von Hans W. (Gast)


Lesenswert?

Hi Leute!

Ich hab hier folgenden Code:
1
while(true)
2
{
3
//produce item
4
wait(empty);
5
wait(mutex);
6
7
//add the item to the buffer
8
9
signal(mutex);
10
signal(full);
11
}


Ich will jetzt wissen was dieser Code genau macht. Meines Erachtens 
bestehen die wait und signal Semaphoren aus diesen Code:
1
wait(S)
2
{
3
value--;
4
if(value < 0)
5
{
6
//add process to waiting queue
7
}
8
}
9
10
11
signal(S)
12
{
13
value++;
14
if(value <= 0)
15
{
16
//remove process from the waiting queue
17
}
18
}


Was passiert nun wenn die Variablen folgendermaßen intialisiert sind:
mutex=1; full=0; empty=N

empty: wie viel ist im Buffer noch frei



Ich gehe nun davon aus, dass der Buffer komplett frei ist. Der Buffer 
soll 10 Speicherstellen aufweisen. Wenn ich das jetzt von oben 
durchgehe, dann is quasi empty=10. wait verringert von 10 auf 9 und 
prüft ob der Wert kleiner 0 ist; ist er aber nicht und kommt somit nicht 
in das if rein und der Prozess kommt somit auch nicht zum Warten in die 
"waiting queue" sondern darf weiter zum wait(mutex). mutex=1 wird zu 
mutex=0, das if ist also wieder nicht erfüllt und ich kann in den Puffer 
schreiben. Dann gehts weiter zum signal(mutex). mutex=0 wird mutex=1 
erhöht, das if ist erfüllt und es wird ein momentan wartender Prozess 
von der waiting queue entfernt.

-> Was passiert an dieser Stelle? Wo wird da welcher Prozess von der 
waiting queue entfernt? Mache ich an dieser Stelle nun mit der letzten 
Semaphore (signal(full)) weiter oder beginne ich jetzt an einer anderen 
Stelle?

Könnt ihr mir ein bisschen helfen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.