Semaphoren und Bounded Buffer

Gast #2443991
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren