Download Inhoudsopgave Inhoud Print deze pagina

Conrad C-Control II Unit Gebruiksaanwijzing pagina 44

Inhoudsopgave

Advertenties

Een thread mag nooit twee capture – opdrachten uitvoeren zonder tussentijdse release.
De C2 – compiler kan dat niet controleren. Bij veronachtzaming leidt dat tot blokkades in het programma.
Voorbeeld:
byte flag1;
byte flag2;
thread tx
{
capture flag1; / / blokkade in de 2
capture flag2; / / flag1 wordt "vergeten"
/ / . . .
release;
}
De thread tx in het bovenstaande voorbeeld loopt net als elke thread automatisch in een eindeloze lus. Bij
de tweede doorloop van de lus blokkeert hij, omdat flag1 nog op "bezet" staat.
Afsluitend: een voorbeeld van zowel het gebruik van de expliciete als van de impliciete capture vorm:
1) Vermijden van aliasing bij toegang tot geheugens door expliciete capture
float a, b;
/ / meetwaarden
byte flag;
/ / synchronisatie – variabele
thread measure
{
capture flag;
a = get_channel_a ();
b = get_channel_b ();
release;
/ / . . .
}
thread watch
{
capture flag ;
check (a, b) ;
release ;
/ / . . .
}
2. Synchronisatie van toegang tot resources door impliciete capture in een functie
function send ( bytre buf [ ] , int length )
{
capture ;
wait resource.ready () ;
resource.send (buf, length) ;
release ;
}
In het voorbeeld wordt hier een module resource aangenomen, waarvan de functies zelf nog niet
gesynchroniseerd zijn. Alle bibliotheekmodules voor de toegang tot systeemresources van de C-Control II
unit bevatten reeds de benodigde synchronisatie (zie b.v. module hwcom.c2).
e
doorloop
/ / alleen flag2 wordt vrijgegeven
44

Advertenties

Inhoudsopgave
loading

Deze handleiding is ook geschikt voor:

19 11 11

Inhoudsopgave