Hallo,
nachdem die Lösung zu dieser Aufgabe erschienen ist, habe ich sir mir mal näher angeschaut. Dabei ist mir aber eine Frage aufgekommen. Es geht um diesen Teil:
Code: Alles auswählen
:: atomic { /* atomic test & set */
printerStatus == free ->
printerStatus = busy
};
printer++;
printf("Sending pdf file to printer %d", _pid);
printer--;
printerStatus = free;
od
Die Überprüfung, ob der Drucker frei ist und die anschließende Setzung auf "busy" erfolgt innerhalb einer Anweisung, weil der entsprechende Code in einem atomic-Block steht. Mir ist jedoch nicht klar, warum die Variabel "print" niemals über 1 kommen kann.
Wo ist der Fehler im folgenden Szenario?
Drucker1 erteilt einen Auftrag. Die Variabel "printer" wird um 1 erhöht.
Drucker2 erteilt einen Auftrag. Er kommt nicht in den atomic-Block rein, weil das guad blockt und geht daher weiter. Damit wird "printer" um 1 erhöht.
Drucker1 gibt "Sending pdf file to printer" aus.
...
Nun ist die Variabel printer == 2. Warum kann das nicht sein? Das habe ich noch nicht so ganz verstanden!
Vielen Dank