31.10.2012 Aufrufe

referenzanleitung val3 d28056202b - 06/2005 - eule-roboter.de

referenzanleitung val3 d28056202b - 06/2005 - eule-roboter.de

referenzanleitung val3 d28056202b - 06/2005 - eule-roboter.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Synchronisierung<br />

Manchmal müssen mehrere Tasks miteinan<strong>de</strong>r synchronisiert wer<strong>de</strong>n, bevor ihre Ausführung fortgesetzt wer<strong>de</strong>n kann.<br />

Wenn die Ausführungszeiten <strong>de</strong>r einzelnen Tasks bekannt sind, kann die Synchronisierung einfach durch Warten auf<br />

ein Signal <strong>de</strong>s langsamsten Jobs erfolgen. Ist aber nicht bekannt, welche die langsamste Task ist, kommt ein etwas<br />

komplexeres Synchronisierungsverfahren zum Einsatz, von <strong>de</strong>m ein Programmierbeispiel in VAL3 nachstehend<br />

angegeben ist.<br />

Zum Beispiel<br />

// Globale Variablen zur Steuerung <strong>de</strong>r Synchronisierung<br />

num n<br />

bool bSynch<br />

n=0 // Initialisierung <strong>de</strong>r globalen Variablen<br />

bSynch=false<br />

program tache1()<br />

begin<br />

while(true)<br />

call synchro(n, bSynch, 2) // Synchronisierung mit Task 2<br />

<br />

endWhile<br />

end<br />

program tache2()<br />

begin<br />

while(true)<br />

call synchro(n, bSynch, 2) // Synchronisierung mit Task 1<br />

<br />

endWhile<br />

end<br />

// Programm zur Synchronisierung von N Tasks<br />

program synchro(num& n, bool& bSynch, num N)<br />

begin<br />

n = n + 1<br />

wait((n==N) or (bSynch==true)) // Warten auf die Synchronisierung <strong>de</strong>r Tasks<br />

bSynch = true<br />

n = n - 1<br />

wait((n==0) or (bSynch == false)) // Warten auf die Freigabe <strong>de</strong>r Tasks<br />

bSynch = false<br />

end<br />

54 / 122 D28056202B - <strong>06</strong>/<strong>2005</strong>

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!