referenzanleitung val3 d28056202b - 06/2005 - eule-roboter.de
referenzanleitung val3 d28056202b - 06/2005 - eule-roboter.de
referenzanleitung val3 d28056202b - 06/2005 - eule-roboter.de
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>