Models of Concurrency

Like dokumenter
Operativsystemer, prosesser og tråder

INF3140 Modeller for parallellitet INF3140/4140: Monitorer

UNIVERSITETET I OSLO

Fra sekvensielt til parallelt

Meldingsutveksling. Martin Steffen 1. University of Oslo, Norway INF3140. Høst 2007

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

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

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

Fra sekvensielt til parallelt

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

Mer om C programmering og cuncurrency

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen

Hjemmeeksamen 2 i INF3110/4110

Lars Vidar Magnusson. October 11, Lars Vidar Magnusson () Forelesning i Operativsystemer October 11, / 28

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

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

Forelesning III Kap 8 & 7; Dagsplan. Gjenbruk. Condition synchronization. Gjennomgående eksempler. Kode: Design: Verktøy

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

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

INF våren 2017

Kort notat om parallellstyring IN147

2 Om statiske variable/konstanter og statiske metoder.

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

IN våren 2018 Tirsdag 16. januar

IN våren 2019 Onsdag 16. januar

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

RM-ODP og Multimedia middleware (M3W):

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Øving i Tornado og VxWorks

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

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Programmering i C++ Løsningsforslag Eksamen høsten 2005

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Forslag til løsning på oppgavesett for uke 40

Plan for dagen. Kræsj-kurs i sanntidsprogrammering. Måter å tenke på. Programmering intro. Tråder & synkronisering

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Faglig kontakt under eksamen: Orestis Gkorgkas

Fakultet for informasjonsteknologi,

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Moderne Funksjonell Programmering i Lisp

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

TDT4258 Eksamen vår 2013

Oppgave 1 JK-flip-flop (Total vekt 20%)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

Eksamensoppgave i TDT4258 Energieffektive datamaskinsystemer

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Programmeringsspråket C

Semantisk Analyse del I

Kap 2: Løkker og lister

INF3430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 1

INF2810: Funksjonell Programmering

2 Om statiske variable/konstanter og statiske metoder.

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

INF2810: Funksjonell Programmering

Obligatorisk Innlevering 2

Dagens tema: 12 gode råd for en kompilatorskriver

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Oppsummering av IN147 siste del Operativsystemer Parallellisering Veien videre

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Rekursjon som programmeringsteknikk

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

Diverse eksamensgaver

Distribuerte objekter og objekt-basert mellomvare

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

INF2810: Funksjonell Programmering. Muterbare data

UNIVERSITETET I OSLO

Distribuerte objekter og objekt-basert mellomvare

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.

UNIVERSITETET I OSLO

Lisp 5: Makroer. Programvareverkstedet. 29. april 2010

Samtidige prosesser. Prosessor modus. Hvordan kan OS effektivt kontrollere brukerprosesser? Hvordan kan OS. kontrollere brukerprosesser?

Presentasjon av: Erling Ringen Elvsrud Nils Fredrik Gjerull Håkon Torjus Bommen

Distribuerte objekter og objekt-basert mellomvare

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

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

INF3430/4431. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

MPIntroduksjon Et eksempel

INF2810: Funksjonell Programmering

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Transkript:

Models of Concurrency Martin Steffen 1 University of Oslo, Norway INF3140 Høst 2007

Dagens program Mer asynkron meldingsutveksling Interagerende prosesser med ulike kommunikasjonsmønstre Oppsummering av erfaringer Remote procedure call ( RPC ) Hva RPC er Eksempler: klokketjener, strømfletting, verdi-ombytting Rendezvous Hva rendezvous er Eksempler: buffer, klokketjener, verdi-ombytting Kombinasjoner av RPC, rendezvous og meldingsutveksling Eksempler: Begrenset buffer, lesere og skrivere Martin Steffen (UiO) Models of Concurrency 2007 2 / 32

Interagerende prosesser: ombytting av verdier Studerer prosesser som likemenn (eng. peers ). Bruker følgende modellproblem: Gitt n prosesser P[0],..., P[n 1], n > 1 Hver prosess har et tall lagret i lokal variabel v Mål: alle prosesser skal få vite største og minste tall Sammenligner og vurderer ulike kommunikasjonsmønstre: Martin Steffen (UiO) Models of Concurrency 2007 3 / 32

Interagerende prosesser: ombytting av verdier Studerer prosesser som likemenn (eng. peers ). Bruker følgende modellproblem: Gitt n prosesser P[0],..., P[n 1], n > 1 Hver prosess har et tall lagret i lokal variabel v Mål: alle prosesser skal få vite største og minste tall Sammenligner og vurderer ulike kommunikasjonsmønstre: P 5 P 4 P 5 P 4 P 5 P 4 P 1 P 0 P 3 P 0 P 3 P 0 P 3 P2 P 1 P 2 P 1 P 2 sentralisert symmetrisk ringformet Martin Steffen (UiO) Models of Concurrency 2007 3 / 32

Sentralisert løsning: kommentarer P 5 P 4 P 1 P 0 P2 P 3 Prosess P[0] er koordinator : P[0] gjør beregningen, dvs. finner største og minste tall. De andre prosessene bare sender sine tall og venter på svar fra P[0]. Telling av utvekslete meldinger: Ett send receive-par per melding nok å telle antall send: P[0]: n 1 P[1],..., P[n 1]: (n 1) 1 Totalt (n 1) + (n 1) = 2(n 1) meldinger utvekslet n kanaler nødvendig. Martin Steffen (UiO) Models of Concurrency 2007 4 / 32

Sentralisert løsning: kode chan values ( i nt ), r e s u l t s [ 1.. n 1]( i n t smallest, i nt l a r g e s t ) ; process P [ 0 ] { # koordinator prosess i nt v =... ; # anta v i n i t i a l i s e r t i nt new, s ma llest = v, l a r g e s t = v ; # i n i t i a l i s e r i n g # faa tak i v e r di e r og l agre s t o e r s t og minst for [ i = 1 to n 1] { r eceive values (new ) ; i f (new < s m allest ) s ma llest = new ; i f (new > l a r g e s t ) l a r g e s t = new ; } # send r e s u l t a t e t t i l de andre prosessene for [ i = 1 to n 1] send r e s u l t s [ i ] ( smallest, l a r g e s t ) ; } process P[ i = 1 to n 1] { i nt v =... ; i nt smallest, l a r g e s t ; send values ( v ) ; r e ceive r e s u l t s [ i ]( smallest, l a r g e s t ) ; } # Fig. 7.11 i Andrews ( l i t e problem r e t t e t ) Martin Steffen (UiO) Models of Concurrency 2007 5 / 32

Symmetrisk løsning: kommentarer P 5 P 4 P 0 P 3 P 1 P 2 Single-program, multiple data ( SPMD ) -løsning: Hver prosess utfører samme program og kommuniserer resultatet til alle andre. n prosesser som hver sender n 1 meldinger, dvs. totalt n(n 1) meldinger utvekslet. n kanaler nødvendig Martin Steffen (UiO) Models of Concurrency 2007 6 / 32

Symmetrisk løsning: kode chan values [ n ]( i n t ) ; process P[ i = 0 to n 1] { i nt v =... ; i nt new, s ma llest = v, l a r g e s t = v ; # send v t i l de n 1 andre prosessene for [ j = 0 to n 1 st j!= i ] send values [ j ] ( v ) ; # faa tak i n 1 v er d i e r # og l agre s t oerst og minst. for [ j = 1 to n 1] { # j ikke brukt i loekka r eceive values [ i ] ( new ) ; i f (new < s m allest ) smallest = new ; i f (new > l a r g e s t ) l a r g e s t = new ; } } # Fig. 7.12 i Andrews Martin Steffen (UiO) Models of Concurrency 2007 7 / 32

Ringformet løsning: kommentarer P 5 P 4 P 0 P 3 P 1 P 2 Nesten symmetrisk, bortsett fra P[0], P[n 2] og P[n 1]. Hver prosess utfører samme program og sender svaret videre (hvis nødvendig). Teller antall send: P[0]: 2 P[1],..., P[n 3]: (n 3) 2 P[n 2]: 1 P[n 1]: 1 Totalt 2 + 2(n 3) + 1 + 1 = 2(n 1) meld. utvekslet. n kanaler nødv. Martin Steffen (UiO) Models of Concurrency 2007 8 / 32

Ringformet løsning: kode (1) chan values [ n ]( i n t smallest, i nt l a r g e s t ) ; process P [ 0 ] { # i n i t i a l i s e r utveklsingen i nt v =... ; i nt smallest = v, l a r g e s t = v ; # send v t i l neste prosess, P[ 1 ] send values [ 1 ] ( smallest, l a r g e s t ) ; # faa globale s ma llest og l a r g e s t f ra P[ n 1] # og send dem videre t i l P[ 1 ] r e ceive values [ 0 ] ( smallest, l a r g e s t ) ; send values [ 1 ] ( smallest, l a r g e s t ) ; } Martin Steffen (UiO) Models of Concurrency 2007 9 / 32

Ringformet løsning: kode (2) process P[ i = 1 to n 1] { i nt v =... ; i nt smallest, l a r g e s t ; # motta s ma llest og l a r g e s t saa langt, # og oppdater dem ved sammenlingning med v r e ceive values [ i ] ( smallest, l a r g e s t ) i f ( v < s ma llest ) s m allest = v ; i f ( v > l a r g e s t ) l a r g e s t = v ; # send r e s u l t a t e t t i l neste, og vent paa globalt r e s u l t a t send values [( i +1) mod n ]( smallest, l a r g e s t ); i f ( i < n 1) r eceive values [ i ] ( smallest, l a r g e s t ) ; # send glob. res. videre, men ikke f r a P[ n 1] t i l P[ 0 ] i f ( i < n 2) send values [ i +1]( smallest, l a r g e s t ) ; } # Fig. 7.3 i Andrews ( r e t t e t ) Martin Steffen (UiO) Models of Concurrency 2007 10 / 32

Erfaring med meldingsutveksling Meldingsutveksling velegnet for applikasjoner der prosesser kommuniserer enveis over én eller flere kanaler. Kan også lage klient-tjener-applikasjoner ved meld.utv., men: Hver klient må ha egen svarkanal Generelt: to-veis kommunikasjon må realiseres med 2 kanaler Gir mange kanaler RPC og rendezvous passer bedre for klient-tjener -applikasjoner. Martin Steffen (UiO) Models of Concurrency 2007 11 / 32

Remote Procedure Call: hovedidé kallende prosess paa maskin A kalt prosedyre paa maskin B op foo(formals); # deklarasjons... call foo(args); -----> proc foo(formals) # ny prosess lages... <----- end;... Martin Steffen (UiO) Models of Concurrency 2007 12 / 32

RPC (forts.) RPC kombinerer noen elementer fra monitorer og meldingsutveksling Som vanlig prosedyrekall, men kaller og kalt prosedyre kan være i ulike adresserom, f.eks. på ulike maskiner i nettverk. Kallerprosessen blokkerer til kalt prosedyre er ferdig, som ved monitor-kall og synkron meldingsutveksling. Asynkron programmering støttes ikke direkte. 1 En ny prosess håndterer hvert kall. Potensielt toveis kommunikasjon: kaller sender argumenter og mottar resultat. 1 Men: Creol... Martin Steffen (UiO) Models of Concurrency 2007 13 / 32

RPC: modul, prosedyre, prosess Modul : ny programmeringskonstruksjon for både prosedyrer, og prosesser. module M g r e n s e s n i t t for eksporterte operasjoner ; body v a r i a b e l d e k l a r a s j o n e r ; i n i t i a l i s e r i n g s k o d e ; prosedyrer for eksport erte operasjoner ; l okale prosesser ; end M Moduler kan være i ulike adresserom Prosedyrer og prosesser i M: kan dele variable utføres samtidig (eng. concurrent) må synkronisering for gjensidig utelukkelse kan kun kommunisere med prosesser i M ved prosedyrer eksportert av M Martin Steffen (UiO) Models of Concurrency 2007 14 / 32

RPC: operasjoner Deklarasjon av operasjon O: op O(formelle arg.) [ returns type ] ; Implementasjon av operasjon O: proc O(formelle arg.) [ returns variabel ] { lokale variabeldeklarasjoner; setninger } Kall av modul Ms operasjon O: call M.O(aktuelle arg.) Prosesser : som før. Martin Steffen (UiO) Models of Concurrency 2007 15 / 32

Eksempel: Klokketjener (RPC) Problem: Lage modul som tilbyr klokke-tjenester til prosesser i andre moduler. Klokketjeneren har to operasjoner synlige for klientprosesser: get time() returns int returnerer klokkeslettet delay(int interval) lar prosess sove i spesifisert antall tidsenheter Flere klienter dvs. flere prosesser kan utføre operasjoner samtidig behov for beskyttelse av variable. Klokketjeneren har en intern prosess som får avbrudd (eng. interrupts) fra en maskinvareklokke og oppdaterer sin klokke. Martin Steffen (UiO) Models of Concurrency 2007 16 / 32

Kode: Klokketjener (RPC 1) module TimeServ er op get time () returns i n t ; op delay ( i nt i n t e r v a l ) ; body i nt tod = 0; # k l o k k e s l e t t e t sem m = 1; # for gj e n s i d i g u telukkelse sem d [ n ] = ([ n ] 0); # for ventende prose sser queue of ( i nt waketime, i nt p r ocess i d ) napq ; ## naar m == 1, tod < waketime for ventende prosesser proc get time () r eturns time { time = tod ; } proc delay ( i n t i n t e r v a l ) { P(m) ; # anta myid unik og i [0, n 1] i n t waketime = tod + i n t e r v a l ; s ett inn ( waketime, myid) paa r e t t sted i napq ; V(m) ; P(d [ myid ] ) ; } process Clock.... end TimeServ er # vent paa aa b l i vekket Martin Steffen (UiO) Models of Concurrency 2007 17 / 32

Kode: Klokketjener (RPC 2) process Clock { i n t id ; s t a r t maskinvareklokka ; while ( true ) { vent paa avbrudd, og r e s t a r t maskinvareklokka tod = tod + 1; P(m) ; # mutex while ( tod >= minste waketime i napq) { f j e r n ( waketime, id ) fra napq ; V(d [ id ] ) ; } V(m) ; } } end TimeServer # Fig. 8.1 i Andrews ( f e i l r e t t e t ) # vekk prosess # mutex Martin Steffen (UiO) Models of Concurrency 2007 18 / 32

Rendezvous RPC: Tilbyr intermodul-kommunikasjon Programmeren må lage synkronisering eksplisitt Rendezvous: Kjent fra språket Ada (US DoD) Kombinerer kommunikasjon mellom og synkronisering av prosesser Lager ikke ny prosess ved kall. I stedet: gjør rendezvous med eksisterende prosess Operasjoner utføres én av gangen synch send og receive kan betraktes som primitiv rendezvous. Martin Steffen (UiO) Models of Concurrency 2007 19 / 32

Rendezvous: hovedidé kallende prosess paa maskin A kalt prosess paa maskin B op foo(formals);...... # eksisterende prosess call foo(args); -----> in foo(formals) -> BODY;... <----- ni Martin Steffen (UiO) Models of Concurrency 2007 20 / 32

Rendezvous: modul-deklarasjon module M op O 1 ( typer ) ;... op O n ( typer ) ; body process P 1 { v a r i a b e l d e k l a r a s j on e r ; while ( true ) in O 1 ( v a r i a b l e ) and B 1 > S 1 ;... [ ] O n ( v a r i a b l e ) and B 1 > S n ; ni }... andre prosesse r end M Martin Steffen (UiO) Models of Concurrency 2007 21 / 32

Rendevous: uttrykkssyntaks Kall: c a l l O i (expr 1,..., expr m ) ; Innputt-setning, serie av guarde de uttrykk: in O 1 (v 1,...v m1 ) and B 1 > S 1 ;... [ ] O n(v 1,... v mn ) and B n > S n ; ni Bestanddeler i guard: and B i synkroniseringsuttrykk (valgfri) S i setninger (1 eller flere) Variablene v 1,...,v mi kan refereres av B i og leses/skrives av S i. Martin Steffen (UiO) Models of Concurrency 2007 22 / 32

Rendezvous: semantikk for innputt-setningen Gitt følgende: in... [ ] O i (v i,..., v mi ) and B i > S i ;... ni Guard en slår til når O i kalles og B i sann (eller utelatt). Utførelse av in-setningen: Blokkerer til guard for en operasjon slår til Hvis flere guard er slår til, betjen det eldste kallet Verdier returneres til kaller Så er call- og in-setningene ferdige Martin Steffen (UiO) Models of Concurrency 2007 23 / 32

Eksempel: begrenset buffer (rendezvous) module BoundedBuf f er op deposit ( elem ), fetch ( r e s u l t elem ) ; body process Buffer { elem buf [ n ] ; i n t front = 0, rear = 0, count = 0; while ( true ) in deposit ( item ) and count < n > buf [ rear ] = item ; count++; rear = ( rear +1) mod n ; [ ] fetch ( item ) and count > 0 > item = buf [ front ] ; count ; f ront = ( front +1) mod n ; ni } end BoundedBuffer # Fig. 8.5 i Andrews ( modulo navn ) Martin Steffen (UiO) Models of Concurrency 2007 24 / 32

Eksempel: klokketjener (rendezvous) module TimeServ er op get time () returns i n t ; op delay ( i nt ) ; # NB: absolutt tid som argument op t i ck ( ) ; # k a l l e s ved timer s t y r t avbrudd body process Timer { i n t tod = 0; s t a r t maskinvare timer ; while ( true ) in get time () r eturns time > time = tod ; [ ] delay ( waketime ) and waketime <= tod > skip ; [ ] t i c k () > { tod++; r e s t a r t maskinvare timer &; ni } end TimeServer # Fig. 8.7 i Andrews Martin Steffen (UiO) Models of Concurrency 2007 25 / 32

RPC, rendezvous og meldingsutveksling Programmerer nå med blanding av primitiver: forespørsel håndtering effekt call proc prosedyrekall (RPC) call in rendezvous send proc dynamisk prosess-laging send in asynkron meldingsutveksling Martin Steffen (UiO) Models of Concurrency 2007 26 / 32

RPC, rendezvous og meldingsutveksling Programmerer nå med blanding av primitiver: forespørsel håndtering effekt call proc prosedyrekall (RPC) call in rendezvous send proc dynamisk prosess-laging send in asynkron meldingsutveksling i tilleg (ikke i Andrews) asynkron prosedyrekall, wait-by-necessity, futures Martin Steffen (UiO) Models of Concurrency 2007 26 / 32

Rendezvous, meldingsutveksling og semaforer sammenhenger Sammenligning av innputt-setning og receive: in O(a 1,...,a n ) -> v 1 =a 1,...,v n =a n ni receive O(v 1,...,v n ) Sammenligning av meldingsutveksling og semaforer: send O() og receive O() V(O) og P(O) Martin Steffen (UiO) Models of Concurrency 2007 27 / 32

Eksempel: begrenset buffer (igjen) module BoundedBuf f er op deposit ( elem ), fetch ( r e s u l t elem ) ; body elem buf [ n ] ; i nt front = 0, rear = 0; # l okale operasjoner som s imulerer semaforer op empty (), f u l l (), mutexd (), mutexf ( ) ; send mutexd ( ) ; send mutexf ( ) ; # i n i t. semaforer t i l 1 for [ i = 1 to n ] # i n i t. empty semaforen t i l n send empty ( ) ; proc deposit ( item ) { r eceive empty ( ) ; r eceive mutexd ( ) ; buf [ rear ] = item ; rea r = ( r ear +1) mod n ; send mutexd ( ) ; send f u l l ( ) ; } proc fetch ( item ) { r eceive f u l l ( ) ; r e ceive mutexf ( ) ; item = buf [ front ] ; front = ( front +1) mod n ; send mutexf ( ) ; send empty ( ) ; } end BoundedBuffer # Fig. 8.12 i Andrews ( modulo navn ) Martin Steffen (UiO) Models of Concurrency 2007 28 / 32

Primitivet?O i rendezvous Nytt primitiv på operasjoner, jf. empty(...) for bet.var. og kanaler.?o betyr antall utestående forespørsler på operasjon O. Nyttig i innputt-setningen for å gi prioritet: in O 1 (...) -> S 1 ; [] O 2 (...) and?o 1 == 0 -> S 2 ; ni Her prioriteres O 1 over O 2. Martin Steffen (UiO) Models of Concurrency 2007 29 / 32

Lesere og skrivere, beskyttet adgang module ReadersWriters op read ( r e s u l t types ) ; # bruker RPC op write ( types ) ; # bruker rendezvous body op s tartread (), endread ( ) ; # l o kale op.... databasen (DB )... ; proc read ( vars ) { c a l l s tartread ( ) ; # faa leseadgang... l e s vars fra DB... ; send endread ( ) ; # f r i g i DB } process Writer { i n t nr = 0; while ( true ) in s tartread () > nr++; [ ] endread () > nr ; [ ] write ( vars ) and nr == 0 >... s k r i v vars t i l DB... ; ni } end ReadersWriters Martin Steffen (UiO) Models of Concurrency 2007 30 / 32

Lesere og skrivere: preferanse skr. module ReadersWriters op read ( r e s u l t types ) ; # bruker RPC op write ( types ) ; # bruker rendezvous body op s tartread (), endread ( ) ; # l o kale op.... databasen (DB )... ; proc read ( vars ) { c a l l s tartread ( ) ; # faa leseadgang... l e s vars fra DB... ; send endread ( ) ; # f r i g i DB } process Writer { i n t nr = 0; while ( true ) in s tartread () and? write == 0& > nr++; [ ] endread () > nr ; [ ] write ( vars ) and nr == 0 >... s k r i v vars t i l DB... ; ni } end ReadersWriters Martin Steffen (UiO) Models of Concurrency 2007 31 / 32

References I [1] G. R. Andrews. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison-Wesley, 2000. Martin Steffen (UiO) Models of Concurrency 2007 32 / 32