09.06.2013 Aufrufe

Entwicklung eines Kontrollsystems für die Strahllagemessung am ...

Entwicklung eines Kontrollsystems für die Strahllagemessung am ...

Entwicklung eines Kontrollsystems für die Strahllagemessung am ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

42 5 DAS KLASSENKONZEPT<br />

ten Routinen Print und Test aufgerufen werden.<br />

Um das Kontrollsystem auch bei nebenläufiger Ausführung sicher zu machen,<br />

existieren <strong>die</strong> Routinen Lock und Unlock. In Abb. 13 ist dargestellt,<br />

was passieren kann, wenn zwei Threads auf <strong>die</strong> Routinen <strong>eines</strong> Moduls abwechselnd<br />

zugreifen. Die gezeigte Situation ist in der Fachliteratur als “Race-<br />

Client-Aufruf Datennahme<br />

Disable!<br />

CPU<br />

Thread 1 Thread 2<br />

IsEnabled? -> JA!<br />

Read -> FEHLER<br />

Abbildung 13: Fehler durch nichtabgesicherte Zugriffe<br />

Condition” bekannt [10, 12]. In <strong>die</strong>ser Situation existieren zwei Threads: Ein<br />

Client möchte ein Modul mit Disable abschalten, während <strong>die</strong> Datennahme<br />

das Modul auslesen möchte. Am Anfang wird <strong>die</strong> CPU der Datennahme zugeteilt.<br />

Sie überprüft mit IsEnabled, ob das Modul aktiviert ist, und erhält<br />

eine positive Antwort. Jetzt passiert das Entscheidende: Die Datennahme<br />

wird an <strong>die</strong>ser Stelle unterbrochen und der Aufruf des Clients be<strong>die</strong>nt. Dieser<br />

deaktiviert das Modul mit Disable. Nachdem <strong>die</strong> Datennahme wieder<br />

den Prozessor zugeteilt bekommt, möchte sie das (jetzt deaktivierte) Modul<br />

auslesen. Das führt zu einem Fehler mit Progr<strong>am</strong>mabruch.<br />

D<strong>am</strong>it so etwas nicht passiert und <strong>die</strong> Daten <strong>eines</strong> Moduls stets in einem konsistenten<br />

Zustand sind, werden Schloßvariablen benutzt. Diese werden oft als<br />

“Locks”, manchmal auch als “Semaphoren 44 ” oder “Mutexes 45 ” bezeichnet.<br />

Eine Lösung als Monitor, wie in [10] vorgeschlagen, kann hier nicht verwendet<br />

werden. Ein Monitor sichert jeweils nur einen Funktionsaufruf gegen<br />

<strong>die</strong> gleichzeitige Ausführung <strong>eines</strong> anderen ab. Nicht geschützt werden aber<br />

44 Zur Kommunikation auf hoher See benutzte Signale<br />

45 Mutual exclusion<br />

Zeit

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!