INF4140 MODELLER FOR PARALLELLITET. PMA-gruppen. Institutt for informatikk Universitetet i Oslo.

Like dokumenter
INF3140 / INF4140 MODELLER FOR PARALLELLITET. PMA-gruppen. Institutt for informatikk Universitetet i Oslo.

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse

INF3140 Modeller for parallellitet INF3140/4140: Låser og Barrierer

INF4140: Låser og Barrierer (Locks and Barriers)

Plan. Oppgaver og repetisjon Eksempler med fikspunkt og induksjon: 1. sortering 2. divisjon 3. Heis? IN 315: Foilsett 9: Unity: Arkitekturer

UNIVERSITETET I OSLO

Dagens plan INF3170 Logikk. Obliger og eksamen. Forelesning 1: Introduksjon, mengdelære og utsagnslogikk. Christian Mahesh Hansen og Roger Antonsen

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

Kort notat om parallellstyring IN147

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Velkommen til INF2100

UNIVERSITETET I OSLO

Velkommen til INF2100 Jeg er Dag Langmyhr

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Hjemmeeksamen 2 i INF3110/4110

Velkommen til. INF våren 2017

Oppsummering av digitalteknikkdelen

UNIVERSITETET I OSLO

Mer kodegenerering: Tilleggsnotat fra AHU Om Javas Byte-kode INF april 2009

Tråder Repetisjon. 9. og 13. mai Tråder

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Betinget eksekvering og logiske tester i shell

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Velkommen til INF Kompilatorteknikk

INF1010 Tråder II 6. april 2016

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

Forelesning inf Java 1

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Dagens plan. INF3170 Logikk. Obliger og eksamen. Forelesning 1: Introduksjon. Utsagnslogikk og sekventkalkyle. Arild Waaler. 21.

INF2810: Funksjonell Programmering

2 Om statiske variable/konstanter og statiske metoder.

Dagens plan. INF3170 Logikk

INF2810: Funksjonell Programmering

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

Forelesning inf Java 1

Velkommen til. IN1010 Objektorientert programmering Våren 2018

INF1800 LOGIKK OG BEREGNBARHET

INF Oblig 2 semantikksjekk og kodegenerering

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Skanning del I INF /01/15 1

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

var y :{x :T R}; S endvar y

INF3140 Modeller for parallellitet INF3140/4140: Monitorer

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Models of Concurrency

INF1000: noen avsluttende ord

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering

Oppsummering av IN147 siste del Operativsystemer Parallellisering Veien videre

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

Velkommen til MAT1030!

MAT1030 Diskret Matematikk

Kapittel 6: Funksjoner

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

MAT1030 Diskret Matematikk

Kapittel 5: Relasjoner

IN1010 Objektorientert programmering Våren 2019

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Velkommen til INF5110 Kompilatorteknikk

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Læringsmål og pensum. Oversikt

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Feilmeldinger, brukerinput og kontrollflyt

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

INF1800 LOGIKK OG BEREGNBARHET

Skanning del I. Kapittel 2 INF 3110/ INF

MAT1030 Diskret Matematikk

Java PRP brukermanual

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Obligatorisk oppgave 6 i INF1010: Dekryptering

Velkommen til. INF våren 2016

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

Intel Core i7. Omid Mirmotahari 4

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Mer kodegenerering: Tilleggsnotat fra AHU. INF mai Stein Krogdahl,

Dagens tema: 12 gode råd for en kompilatorskriver

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

HØGSKOLEN I SØR-TRØNDELAG

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

Kompleksitetsanalyse Helge Hafting Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF3140 Modeller for parallellitet INF3140/4140: Semaforer

Transkript:

INF4140 MODELLER FOR PARALLELLITET PMA-gruppen Institutt for informatikk Universitetet i Oslo http://www.ifi.uio.no/~pma (versjon 27.8.08) INF 4140 H08 Uke 1, side 1.

Modeller for parallellitet Forelesere Joakim Bjørk (IFI) Olaf Owe (IFI) Marcel Kyas (IFI) joakimbj@ifi.uio.no olaf@ifi.uio.no kyas@ifi.uio.no Alle i 3. etg ForskningsParken, innenfor kantina, i PMA-gangen Hjemmeside for kurset http://www.uio.no/studier/emner/matnat/ifi/inf4140/h07/ Pensum Gregory R. Andrews: Foundations of Multithreaded, Parallel, and Distributed Programming Vi planlegger noe tilleggsstoff omkring distribuerte systemer. INF 4140 H08 Uke 1, side 2.

Vurderingsform Tre obliger som må godkjennes. Avsluttende eksamen. Forelesninger Onsdag kl. 14:15-16:00 Alfa/Omega NR, 4.etg i Informatikkbygget. Grupper Gruppelærer: Joakim Bjørk, stipendiat på PMA-gruppen Gruppe 1: Torsdag kl. 14:15-16:00, Foredragssalen, Veglaboratoriet Starter neste uke. NB: Vil muligens finne andre lokaler/andre tider etterhvert. INF 4140 H08 Uke 1, side 3.

Dagens plan Innledning innhold i kurset motivasjon: hvorfor er dette kurset viktig noen enkle eksempler og betraktninger Start litt om parallellprogrammering ved kritiske regioner og venting interferens await-språket INF 4140 H08 Uke 1, side 4.

Hva dette kurset handler om Fundamentale problemstillinger knyttet til samarbeidende parallelle prosesser Tenkemåter knyttet til utvikling av parallelle prosesser Ulike språklige mekanismer og paradigmer Dypere forståelse av parallelle prosesser: (uformell og litt formell) analyse, egenskaper INF 4140 H08 Uke 1, side 5.

Parallelle prosesser Sekvensielt program: én kontrolltråd Parallelt program: flere kontrolltråder Parallelle prosesser trenger å utveksle informasjon. Vi skal studere to ulike måter å organisere kommunikasjonen mellom prosesser: Lesing og skriving til felles variable (del I av kurset) Kommunikasjon ved meldinger mellom prosesser (del II av kurset) INF 4140 H08 Uke 1, side 6.

Oversikt over temaer i kurset Del I: Felles Variable atomiske operasjoner interferens vranglås (deadlock), livelock, liveness, fairness parallelle programmer med låser, kritiske regioner og (aktiv) venting semaforer og passiv venting monitorer formell analyse (Hoare logikk), invarianter Java: tråder og synkronisering INF 4140 H08 Uke 1, side 7.

Oversikt over temaer i kurset Del II: Kommunikasjon asynkron og synkron meldingsutveksling Basis-mekanismer: RPC (remote procedure call), rendevous, klient/tjener setting, kanaler Javas mekanismer analyse ved hjelp av historier asynkrone systemer standard eksempler INF 4140 H08 Uke 1, side 8.

Start Da starter vi med Del I: felles variable Språklige mekanismer og teori for prosesser som opererer på felles programvariable. Hvorfor bruke felles variable? virkeligheten er slik: Eks. flere CPU-er inne i en maskin. naturlig interaksjon for tett koblede systemer. brukes i mange viktige språk, som i Javas trådbegrep. late som om man har mange prosesser, for å få en naturlig oppdeling kan oppnå bedre effektivitet ved at flere ting kan skje samtidig. Eks. å ha flere aktive vinduer på en gang. INF 4140 H08 Uke 1, side 9.

Enkelt eksempel Vi har programvariable x, y og z. La oss se på følgende program: før bak {x er a og y er b} x := x + z; y := y + z; {x er her a+z og y er b+z} Hvis vi har operasjoner på data som kan gjøres uavhengig av hverandre, kan det være en fordel å gjøre disse samtidig. Betingelsene beskriver tilstanden til programvariablene før og etter programsetningene og kalles hhv. for- og bak-betingelse. Disse betingelsene er ment å gi forståelse av programmet, og er ikke del av den koden som eksekveres. Kunne man bruke parallellitet her? INF 4140 H08 Uke 1, side 10.

Parallell-operator Utvider språket med en konstruksjon for parallell komposisjon: co S 1 S 2... S n oc; Eksekvering av en parallell komposisjon skjer ved samtidig eksekvering av delprosessene S 1,..., S n og terminerer normalt hvis alle delprosessene terminerer normalt. Eksempel Dermed kan vi skrive eksempelet som: {x er a og y er b} co x := x + z y := y + z oc; {x er a+z og y er b+z} INF 4140 H08 Uke 1, side 11.

Interaksjon mellom prosesser Prosesser som lever i samme system, kan interagere med hverandre på to ulike måter: Samarbeid for å oppnå et resultat Konkurranse om felles ressurser Organiseringen av denne interaksjonen vil vi kalle synkronisering av prosessene. Gjensidig utelukking (Mutex). Vi innfører kritiske regioner av programinstruksjoner som ikke kan eksekveres samtidig. Betingelsessynkronisering. En prosess må vente på at en bestemt betingelse er oppfylt før eksekvering kan fortsette. INF 4140 H08 Uke 1, side 12.

Samtidige prosesser: Atomiske operasjoner Bokas definisjon: En operasjon er atomisk hvis den ikke kan deles inn i mindre enheter. Alternativ definisjon: En operasjon er atomisk hvis den kan forstås uten å deles inn i mindre enheter. Hva som er atomisk avhenger av språket man jobber i: fin-kornet og grov-kornet atomiskhet. F.eks.: Lesing og skiving av en programvariabel er gjerne atomært. Noen (høy-nivå) språk kan ha tilordning x := e som én atomisk operasjon, andre som flere: lesing av variable i uttrykket e, beregning av verdien e, etterfulgt av skriving til x. Merk: Vi kan late som om atomiske operasjoner ikke skjer samtidig! Merk: En setning med høyst én atomisk del-operasjon, i tillegg til operasjoner på lokale variable, kan anses som atomisk! INF 4140 H08 Uke 1, side 13.

Atomiske operasjoner: programvariable Behandlingen av programvariable er fundamental: Også kommunikasjon mellom prosesser kan representeres ved variable, f. eks. en kommunikasjonskanal som en variabel av type sekvens. Til hver programvariabel assosieres en mengde med atomære operasjoner, f. eks. lesing og skriving til vanlige programvariable, sending og mottak på kommunikasjonskanaler, etc. Atomære operasjoner på en variabel x kalles x-operasjoner. Gjensidig utelukking Atomære operasjoner på en variabel kan ikke skje samtidig. INF 4140 H08 Uke 1, side 14.

Eksempel Vi skal nå se på programmet Hva blir slutt-tilstanden her? P 1 P 2 int x = 0; co x := x + 1 x := x 1 oc; {?} Vi antar at hver prosess blir eksekvert på en egen prosessor, med eget register, og at x er del av et felles tilstandsrom med programvariable. Aritmetiske operasjoner i de to prosessene kan utføres samtidig, men lese- og skriveoperasjoner på x må gjøres sekvensielt. Rekkefølgen på disse operasjonene er avhengig av relativ prosessorhastighet. Utfallet av slike program blir dermed svært vanskelig å forutsi! INF 4140 H08 Uke 1, side 15.

Atomære lese- og skriveoperasjoner P 1 P 2 int x := 0; co x := x + 1 x := x 1 oc; {?} Det er 4 atomære x-operasjoner: P 1 leser (R1) verdien i x, P 1 skriver (W1) en verdi til x, P 2 leser (R2) verdien i x, og P 2 skriver (W2) en verdi til x. R1 må skje før W1 og R2 før W2, så disse operasjonene kan sekvenseres på 6 måter: R1 R1 R1 R2 R2 R2 W1 R2 R2 R1 R1 W2 R2 W1 W2 W1 W2 R1 W2 W2 W1 W2 W1 W1 0-1 1-1 1 0 Utfra tabellen kan vi angi slutt-tilstanden til programmet: x= 1 x=0 x=1. Programmet er altså ikke-deterministisk : resultatet kan variere fra eksekvering til eksekvering. int x := 0; co x := x + 1 x := x 1 oc; {x= 1 x=0 x=1} INF 4140 H08 Uke 1, side 16.

Antall mulige kjøringer Hvis vi har 3 prosesser, hver med et gitt antall atomiske operasjoner, vil vi få følgende antall mulige eksekveringer: prosess 1 prosess 2 prosess 3 antall kjøringer 2 2 2 90 2 2 3 210 2 3 3 560 3 3 3 1680 4 4 4 34 650 5 5 5 756 756 NB: Ulike eksekveringer kan gi opphav til ulike slutt-tilstander. Umulig, selv for ganske enkle systemer, å se på hver mulige eksekvering for seg! For n prosesser med m atomiske setninger hver, er formelen (n m)! m! n INF 4140 H08 Uke 1, side 17.

at-most-once -egenskapen Definisjon. Et uttrykk e oppfyller egenskapen hvis det inneholder høyst én atomisk operasjon på en delt variable som andre prosesser skriver til. En tilordning x := e oppfyller egenskapen hvis enten e oppfyller egenskapen og x ikke leses av andre, eller x er delt og e ikke snakker om delte variable. Slike uttrykk/setninger kan anses som atomiske! Eksempler: (la z være en lokal variabel): x := 0; y := 0;co x := x + 1 y := x + 1 oc x := 0; y := 0;co x := y + 1 y := x + 1 oc; {x og y er 1 eller 2} x := 0; y := 0;co x := y + 1 x := y + 3 y := 1 oc; {y=1 x= 1, 2, 3, 4} co z := y + 1 z := y 1 y := 5 oc z := x x... {er z nå 0?} x := x... {samme som skip?} if y > 0 then y := y 1 fi if y > 0 then y := y 1 fi INF 4140 H08 Uke 1, side 18.

Kursets første programmeringsspråk: await-språket vanlige sekvensielle, imperative konstruksjoner som tilordning, if-, for- og while-setninger cobegin-konstruksjonen for parallell aktivitet prosesser kritiske regioner await-setninger for (aktiv) venting og betingede kritiske regioner INF 4140 H08 Uke 1, side 19.

Programmeringsspråket: Syntaks Vi bruker følgende syntaks for basale konstruksjoner: Deklarasjoner int i := 3; int a[1:n]; int a[1:n] = ([n] 1); int a[n]; tilsvarerint a[0:n-1]; int a[n] = ([n] 0); Sekvensielle setninger Tilordning x:=e; a[n]:=e; a[n]++; tilsvarera[n]:= a[n]+1; sum +=i; tilsvarersum:=sum+i; Sammensatt setning { setninger } Kondisjonal if (betingelse) setning While-løkke while (betingelse)setning For-løkke for [i=0 to n-1] setning INF 4140 H08 Uke 1, side 20.

Parallelle setninger co S 1 S 2... S n oc; Hver arm S i inneholder en programsetning som blir utført i parallell med de øvrige armene. co-setningen terminerer når alle armene S i har terminert. Neste instruksjon etter co-setningen eksekveres etter at co-setningen har terminert. Parallelle prosesser process foo { Prosesser kjører i bakgrunnen int sum := 0; Prosesser evalueres i vilkårlig rekkefølge. for [i= 1 to 10] Prosesser deklareres (som metoder/funksjoner ) sum += i; x := sum; } INF 4140 H08 Uke 1, side 21.

Eksempel process bar1 { for [i = 1 to n] write(i);} Starter én prosess. Tallene skrives ut i stigende rekkefølge. process bar2[i=1 to n] { write(i); } Starter n prosesser. Tallene skrives ut i tilfeldig rekkefølge fordi eksekveringsrekkefølgen på prosessene er ikke-deterministisk. INF 4140 H08 Uke 1, side 22.

Lese- og skrivevariable La V : statement variable set være en syntaktisk funksjon som beregner mengden av programvariable som refereres i programmet. W : statement variable set er mengden av (skrive)variable som kan bli endret av programmet. V[v:=e] = V[e] {v} W[v:=e] = {v} V[S 1 ; S 2 ] = V[S 1 ] V[S 2 ] W[S 1 ; S 2 ] = W[S 1 ] W[S 2 ] V[if (b) S ] = V[b] V[S] W[if (b) S ] = W[S] V[while (b) S ] = V[b] V[S] W[while (b) S ] = W[S] der V[e] er mengden av variable i uttrykket e. NB: Vi antar her at += og ++ tilordninger skrives helt ut. INF 4140 H08 Uke 1, side 23.

Disjunkte prosesser Parallelle prosesser er uten interferens hvis de er disjunkte, dvs. uten felles programvariable: V[S 1 ] V[S 2 ] = Variable som bare leses, kan imidlertid ikke gi opphav til interferens. Det er derfor tilstrekkelig med følgende interferens kriterium: V[S 1 ] W[S 2 ] = W[S 1 ] V[S 2 ] = INF 4140 H08 Uke 1, side 24.

Semantiske begrep En tilstand i et parallelt program består av verdien til programvariablene på et gitt tidspunkt i eksekveringen. Hver prosess eksekverer uavhengig av de andre ved å modifisere programvariable vha. atomære operasjoner. En eksekvering av et parallelt program kan modelleres ved en historie, dvs. en sekvens av operasjoner på programvariablene, alt. som en sekvens av tilstander. For ikke-trivielle parallelle programmer finnes det veldig mange mulige historier. Synkronisering brukes til å begrense mulige historier. INF 4140 H08 Uke 1, side 25.

Egenskaper En egenskap ved et program er et predikat som er sann for alle mulige historier til programmet. To typer: Sikkerhetsegenskaper sier at programmet ikke vil komme til en uønsket tilstand. Progresjonsegenskaper sier at programmet vil komme til en ønsket tilstand (liveness). Partiell korrekthet : Programmet kommer til en ønsket slutt-tilstand hvis programmet terminerer (sikkerhetsegenskap). Terminering: Lengden på alle historier er endelige. Total korrekthet : Programmer terminerer og er partielt korrekt. INF 4140 H08 Uke 1, side 26.

Egenskaper: Invarianter Definisjon. En felles egenskap for alle tilstander som kan oppstå ved eksekvering, i.e. egenskap som holder til enhver tid. sikkerhetsegenskap hensiktsmessig for ikke-terminerende systemer (unngår å snakke om en sluttilstand) global invariant snakker om tilstanden til mange prosesser på én gang, gjerne total-systemet lokal invariant snakker om tilstanden til én prosess. man kan vise at en invariant er korrekt ved å vise at den gjelder initielt, og at hver atomisk setning vedlikeholder den. Merk: slipper å se på alle mulige eksekveringer! INF 4140 H08 Uke 1, side 27.

Hvordan sjekke egenskaper ved programmer? Testing eller debugging øker tilliten til programmet ved prøving, men gir ingen garanti for korrekthet. Operasjonell resonnering utprøver alle historiene til et program. Formell analyse : Metode for å regne på egenskaper ved et program uten å prøve historiene én og én. En test kan påvise feil, men aldri påvise korrekthet! INF 4140 H08 Uke 1, side 28.

Kritiske regioner Gjensidig utelukking: kombinerer sekvenser av operasjoner til kritiske regioner som oppfører seg som atomære operasjoner. Når interferenskravet til parallelle prosesser ikke holder, bruker vi synkronisering til å begrense de mulige historiene. Synkronisering gir grov-kornete atomære operasjoner. Notasjonen< S > betyr atsutføres atomært. Atomære operasjoner: Interne tilstander er ikke synlige for andre prosesser. Variable kan ikke endres av andre prosesser. Eksempel Eksemplet fra tidligere kan nå skrives som: int x := 0; co < x := x + 1 > < x := x 1 > oc; {x er her 0} INF 4140 H08 Uke 1, side 29.

Betingede kritiske regioner Innfører følgende uttrykk: < await (B) S; > Det boolske uttrykketbspesifiserer en ventebetingelse. Hakeparentesene antyder at kroppenseksekveres som en atomær operasjon. Eksempel < await (y > 0) y := y-1; > Variabelenyblir først minket når betingelseny > 0 holder. INF 4140 H08 Uke 1, side 30.

Betingede kritiske regioner (2) Mutex: < x := x+1 ; y := y+1 ; > Betingelsessynkronisering: < await (teller > 0) ; > Vi kan brukeawait til å spesifisere begge synkroniseringsmetodene: int teller = 1;... < await (teller > 0) teller := teller-1; > start region kritiske setninger; teller := teller+1; slutt region Invariant: 0 teller 1 INF 4140 H08 Uke 1, side 31.

Eksempel: produsent/konsument synkronisering LaProducer være en prosess som leverer data til en prosessconsumer. int buf, p := 0, c := 0; process Producer { process Consumer { int a[n];... int b[n];... while (p < n) { while (c < n) { < await (p == c) ; > < await (p > c) ; > buf := a[p] b[c] := buf p := p+1; c := c+1; } } } } Denne type synkronisering kalles for gjerne for busy waiting. INF 4140 H08 Uke 1, side 32.

Eksempel (forts) a: buf: p: c: n: b: Global Invariant : c <= p <= c+1 Lokal Invariant (Producer) : 0 <= p <= n En invariant holder i alle tilstander i historien til programmet. INF 4140 H08 Uke 1, side 33.