Download Inhoudsopgave Inhoud Print deze pagina

Pauzes; Synchronisatie - Conrad C-Control II Unit Gebruiksaanwijzing

Inhoudsopgave

Advertenties

5.9.5

Pauzes

Bij vele toepassingen is het nodig dat een thread zijn uitvoering gedurende een bepaalde tijd onderbreekt
en daarna automatisch doorloopt. Daartoe vindt u in C2 de sleep – opdracht. Na het codewoord sleep
volgt een numerieke term.
sleep numerieke term;
Voorbeeld:
sleep 1000;
De berekende waarde van de numerieke term bepaalt de rustpauze van de actuele thread in
milliseconden. De waarde van de term blijft beperkt tot het int – bereik. Eventueel voert de virtuele
machine een conversie uit. Negatieve pauzewaarden van –1 tot –32768 worden als waarden van 65535
tot 32768 ge nterpreteerd (twee-complement).
De controle, of een pauze beëindigd is, vindt plaats bij elke cyclus waarin de thread rekentijd krijgt. Bij
een toepassing met zeer vele threads, die met hoge prioriteit lange omlooptijden tot gevolg hebben, kan
de daadwerkelijke pauze daarom iets langer dan oorspronkelijk gespecificeerd worden.
Als de pauze nog niet voorbij is, geeft de actuele thread de uitvoering van het programma direct door aan
de volgende thread (vergelijk yield).

5.9.6 Synchronisatie

In computersystemen met parallelle processen kunnen zich de volgende problemen voordoen:
Aliasing van geheugentoegang
Concurrentie van meerdere processen om een resource
Concurrentie om een resource ontstaat bijvoorbeeld, als twee threads gelijktijdig data via dezelfde seriële
interface willen versturen. De seriële interface kan echter slechts één uitgangsbuffer op hetzelfde tijdstip
bedienen. Als gevolg kan slechts één thread gelijktijdig zenden. De tweede thread moet wachten, tot de
resource vrij is.
Als uitleg van het aliasing – probleem het volgende voorbeeld: een thread vraagt cyclisch twee
meetkanalen op en slaat deze op in twee globale variabelen. Een parallelle thread leest deze globale
variabelen en moet telkens beide waarden uit een meetcyclus naar een controlefunctie doorvoeren.
Float a, b;
thread measure
{
a = get_channel_a();
b = get_channel_b();
/ / . . .
}
thread watch
{
check(a, b);
/ / . . .
}
Zoals u al in 5.9.3 gezien heeft, wordt een C2 – opdracht uitgevoerd in meerdere aparte operaties van de
virtuele machine. De opdracht
check (a, b)
leidt ongeveer tot de volgende commando – keten:
1. a) op de stack laden
2. b) op de stack laden
3. functie check oproepen
Zoals in 5.9.3 eveneens uitgelegd is, kan deze commando – keten op elk moment door een wisseling van
thread onderbroken worden, dus ook tussen het eerste en tweede commando in het bovenstaande
/ / Meetwaarden
42

Advertenties

Inhoudsopgave
loading

Deze handleiding is ook geschikt voor:

19 11 11

Inhoudsopgave