Herunterladen Inhalt Inhalt Diese Seite drucken

Conrad C-Control II Unit Handbuch Seite 79

Kompakter steuerungscomputer
Inhaltsverzeichnis

Werbung

5 Programmiersprache C2
besteht aus 4 virtuellen Maschinenoperationen. Angenommen ein Thread bekommt hier
das Freizeichen, dann erfolgt ein Threadwechsel, bevor er free auf 0 setzen kann. Ein
zweiter Thread, der ebenfalls auf dieses Freizeichen wartet, erhält nun Rechenzeit. Das
Signal steht noch auf "frei", obwohl schon ein anderer Thread den kritischen Bereich betre-
ten hat!
Zur Lösung des Synchronisationsproblems stellt die virtuelle Maschine der C-Control II Unit
eine atomare Maschinenoperation zur Verfügung, auf die in C2 über das Schlüsselwort
capture zugegriffen werden kann.
Die capture-Anweisung existiert in einer expliziten und einer impliziten Form. Die
explizite Form erwartet die Angabe eines Bezeichners einer globalen (!) byte-Variable.
z.B.:
byte flag;
thread tx
{
capture flag;
//...
}
Beim Ausführen der capture-Anweisung testet der aktuelle Thread, ob der Wert der
Variablen 0 ist (= "Freizeichen"). Wenn ja, dann schreibt der Thread seine eigene Nummer
(Wert 1 ... 255) in die Variable und merkt sich die Adresse der byte-Variable. Wie
bereits erwähnt, dieser Vorgang läuft atomar, in einer einzigen Operation der virtuellen
Maschine ab.
Die implizite Form lautet
capture;
ohne weitere Angaben. Die implizite Form kann nur innerhalb der Anweisungsblöcke von
Funktionen verwendet werden, nicht in denen von Threads. Die implizite Form nutzt
versteckte globale byte-Variablen, die der C2-Compiler automatisch anlegt. Zu jeder
Funktion exisitiert eine solche Variable.
// explicit: capture the flag
79

Quicklinks ausblenden:

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis