User manual

159
7 – 9 µsec. Bij enkele bytecode commando’s duurt het echter langer, bijv. Floating Point
operaties.
Ook interne interpreter –functies gelden als een cyclus. Omdat b.v. Serial Read wacht tot
een teken van de seriële interface aankomt, kan in uitzonderingsgevallen een cyclus zeer
lang duren.
Een thread krijgt voor zijn locale variabelen zoveel plaats als hem in de threadopties van het
project toegewezen is. Een uitzondering is thread “0 (het hoofdprogramma). Deze thread
krijgt de overige geheugenruimte, die de andere threads overlaten. U moet daarom vooraf
plannen hoeveel geheugenruimte elke extra thread werkelijk nodig heeft.
Opdat extra threads gestart kunnen worden, moet “multithreading” in de projectopties
ingeschakeld worden, en moeten de parameters voor de andere threads in de threadopties
op de correcte waarde gezet worden.
Bij het werken met threads moet steeds Thread Delay en niet AbsDelay gebruikt worden.
Als er toch bijv. een AbsDelay(1000) gebruikt wordt, leidt dit tot het volgende effect: opdat de
thread pas na 5000 cycli (default waarde) naar de volgende thread wisselt, zou de thread
5000*1000ms (5000sec.) lopen tot de volgende thread zou kunnen werken.
Thread synchronisatie
Soms is het nodig dat een thread op de andere wacht. Dit kan bijv. een gemeenschappelijke
hardware bron zijn, die alleen één thread kan bewerken. Of soms definieert men een kritisch
programmabereik, dat slechts één thread mag betreden. Deze functies worden gerealiseerd
door de aanwijzingen Thread Wait en Thread Signal.
Een thread die moet wachten, voert de aanwijzing Thread_Wait uit met een signaalnummer.
De toestand van de thread wordt op wachtend gezet. Dit betekent dat deze thread bij een
mogelijke wisseling van thread overgeslagen wordt. Als de andere thread zijn kritische werk
beëindigd heeft, geeft hij het commando Thread_Signal met hetzelfde signaalnummer dat de
andere thread voor Thread_Wait gebruikt heeft. De thread –toestand van de wachtende
thread verandert dan van wachtend in inactief. Nu wordt hij bij een mogelijke thread
wisseling weer “meegenomen”.
Deadlocks
Als alle threads zich in een wachttoestand begeven met Thread Wait, dan is er geen thread
meer die de andere threads uit de wachtende toestand zou kunnen bevrijden. Deze
constellaties dient u bij de programmering te vermijden.
Tabel thread –toestanden
Toestand Betekenis
actief
De thread wordt op dit moment bewerkt
inactief
Kan na een thread wisseling weer geactiveerd worden
slapend
Wordt na een aantal ticks weer op “inactief” gezet
wachtend
De thread wacht op een signaal