Lab 1 Bonus-Problem 2

Talaron
Mausschubser
Mausschubser
Beiträge: 85
Registriert: 26. Apr 2012 11:34

Lab 1 Bonus-Problem 2

Beitrag von Talaron » 19. Nov 2013 16:12

Hallo,

bei der Bearbeitung der zweiten Bonusaufgabe des ersten Labs sind wir auf einen Atomic-Get&Set-Block getoßen, den man zwar nicht weglassen kann, aber stark vereinfachen könnte:

Wenn man sich streng an die Vorlage aus der Vorlesung hält, sollte man schreiben:

Code: Alles auswählen

atomic {
   guard && !critical;
   critical = true;
} 
queue ! me
critical = false;
Allerdings führt man ja im kritischen Block nur ein einziges Kommando aus, sodass es genausogut möglich wäre, folgendes zu schreiben:

Code: Alles auswählen

atomic {
   guard;
   queue ! me;
} 
Hierdurch hätte man eine Hilfsvariable und zwei Zeilen Code gespart. Ist diese Vereinfachung zulässig, oder sollen wir uns hier wirklich ganz streng an die Vorlage aus der Vorlesung halten?

Grüße und Danke.

Nico Ritschel

Nathan Wasser
Kernelcompilierer
Kernelcompilierer
Beiträge: 430
Registriert: 16. Okt 2009 09:48

Re: Lab 1 Bonus-Problem 2

Beitrag von Nathan Wasser » 19. Nov 2013 18:09

Nein, die Vereinfachung ist nicht zulässig. Ich werde nach der Abgabefrist gerne noch mehr dazu sagen, jetzt scheint es mir aber eher ungeeignet zu sein.

2basti
Erstie
Erstie
Beiträge: 15
Registriert: 17. Okt 2012 18:01

Re: Lab 1 Bonus-Problem 2

Beitrag von 2basti » 3. Dez 2013 19:20

Könnte man denn jetzt "mehr dazu sagen" und vielleicht auch mal ganz allgemein was zwar "funktioniert" aber nicht "erlaubt" ist.
Danke

Nathan Wasser
Kernelcompilierer
Kernelcompilierer
Beiträge: 430
Registriert: 16. Okt 2009 09:48

Re: Lab 1 Bonus-Problem 2

Beitrag von Nathan Wasser » 4. Dez 2013 15:31

Gerne.

Das erste Problem im allgemeinen mit einem Statement wie "atomic { guard; queue ! me }" ist, dass ein potentiell blockierendes Statement "queue ! me" im atomic Block ist. Wenn man so etwas macht, sollte man entweder 100%ig sicher sein, dass dieses Statement nie blockiert, oder aber damit einverstanden sein, dass der atomic Block möglicherweise nicht atomic ist. Da ist es vermutlich wesentlich leichter die Variante zu wählen, bei der man sich solche Fragen nicht stellen muss.

Das zweite Problem ist recht einfach: Ihr solltet hier eine atomic Test&Set Instruktion nachbilden, die es in mancher Hardware gibt. Damit umzugehen ist also durchaus auch praxisrelevant. Alles mögliche in einem atomic Block einzuklammern ist hingegen äußerst weltfremd. SPIN erlaubt dies (und Rendezvouskanäle) um etwas eher kompliziertes sehr einfach ausdrücken zu lassen. Es sollte aber nicht missbraucht werden.

Zu der Frage was erlaubt ist: Wenn in der Aufgabenstellung etwas verlangt wird, dann sollte es auch eingehalten werden.

Antworten

Zurück zu „Archiv“