User manual

Das Setzen des “Freisignals” erfolgt durch das Schlüsselwort release. Da sich ein Thread
merkt, welche byte-Variable er besetzt hat, steht die release-Anweisung ohne weite-
re Angaben.
release;
Ein Thread sollte release sofort aufrufen, wenn er den synchronisierten Bereich verläßt.
Andere, vor capture wartende Threads werden sonst unnötig blockiert.
Ein Thread darf niemals zwei capture-Anweisungen ohne zwischenzeitliches release
ausführen.
Der C2-Compiler kann das nicht nachprüfen. Bei Mißachtung kommt es zu Blockaden im
Programm.
z.B.
byte flag1;
byte flag2;
thread tx
{
capture flag1; // Blockade im 2. Durchlauf
capture flag2; // flag1 wird “vergessen”
//...
release; // nur flag2 wird freigegeben
}
Der Thread tx im obigen Beispiel läuft wie jeder Thread automatisch in einer
Endlosschleife. Im zweiten Schleifendurchlauf blockiert er, da flag1 noch auf “Besetzt
steht.
Abschließend je ein Beispiel zur Anwendung der expliziten und der impliziten
capture-Form:
1.) Vermeidung von Aliasing bei Speicherzugriffen durch explizites capture
C-Control II Unit
80