Forslag til løsning på oppgavesett for uke 40

Like dokumenter
Tråder og concurrency i Linux

Mer om C programmering og cuncurrency

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000: Forelesning 4. Mer om arrayer Metoder

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

Sortering med tråder - Quicksort

UNIVERSITETET I OSLO

IN Notat om I/O i Java

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

UNIVERSITETET I OSLO

Eksempler på ikke-blokkerende systemkall:

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

UNIVERSITETET I OSLO

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

INF1000 Behandling av tekster

INF Seminaroppgaver til uke 3

import java.io.*; import java.util.*; import javagently.text;

EKSAMENSOPPGAVE I INF-1100

UNIVERSITETET I OSLO

Klasser, objekter, pekere og UML. INF gruppe 13

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

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF2100. Oppgaver 23. og 24. september 2010

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

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

UNIVERSITETET I OSLO

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

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

UNIVERSITETET I OSLO

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

IN 147 Program og maskinvare

IN1010 våren Repetisjon av tråder. 15. mai 2018

UNIVERSITETET I OSLO

INF Notat om I/O i Java

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Socket og ServerSocket

Kort notat om parallellstyring IN147

Skisse til løsning for eksamensoppgave i TDT4186 Operativsystemer

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

UNIVERSITETET I OSLO

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

INF2100. Oppgaver uke 40 og

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

Kapittel 1 En oversikt over C-språket

E K S A M E N FAKULTET FOR TEKNOLGI OG REALFAG. Emnekode: ELE217 Emnenavn: Mikrokontrollere og styresystemer.

HØGSKOLEN I SØR-TRØNDELAG

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Kontinuasjonseksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF1000 : Forelesning 5

UNIVERSITETET I OSLO

Eksamen i SLI230, vår 2003.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 (Uke 4) Mer om forgreninger, While-løkker

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

INF Uke 10. Ukesoppgaver oktober 2012

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 8. august 1995 TID:

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

HØGSKOLEN I SØR-TRØNDELAG

(MVC - Model, View, Control)

Forelesning inf Java 5

INF 1000 høsten 2011 Uke september

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

TOD063 Datastrukturer og algoritmer

Transkript:

Forslag til løsning på oppgavesett for uke 40 Lars Vidar Magnusson November 3, 2011 1 Tråder 1. Lag et program som starter tre ulike tråder (forskjellige trådfunksjoner) som hver av skriver ut en melding før de returnerer. void t h r e a d f u n 1 ( void arg ) p r i n t f ( Thread1\n ) ; void t h r e a d f u n 2 ( void arg ) p r i n t f ( Thread2\n ) ; void t h r e a d f u n 3 ( void arg ) p r i n t f ( Thread3\n ) ; p t h r e a d t thread1, thread2, thread3 ; p t h r e a d c r e a t e (&thread1, NULL, thread fun1, NULL) ; p t h r e a d c r e a t e (&thread2, NULL, thread fun2, NULL) ; p t h r e a d c r e a t e (&thread3, NULL, thread fun3, NULL) ; p t h r e a d j o i n ( thread1, NULL) ; p t h r e a d j o i n ( thread2, NULL) ; p t h r e a d j o i n ( thread3, NULL) ; 1

2. Gjør om på det forrige programmet slik at trådene er av samme type og at meldingen gis som et argument til tråden. void t h r e a d f u n ( void arg ) p r i n t f ( %s \n, ( const char ) arg ) ; p t h r e a d t thread1, thread2, thread3 ; p t h r e a d c r e a t e (&thread1, NULL, thread fun, Thread1 ) ; p t h r e a d c r e a t e (&thread2, NULL, thread fun, Thread2 ) ; p t h r e a d c r e a t e (&thread3, NULL, thread fun, Thread3 ) ; p t h r e a d j o i n ( thread1, NULL) ; p t h r e a d j o i n ( thread2, NULL) ; p t h r e a d j o i n ( thread3, NULL) ; 2 Concurrency 1. Lag et program som benytter tre tråder til å øke et felles heltall på forskjellige tidsintervaller. Det globale heltallet må beskyttes med en valgfri concurrency mekanisme. pthread mutex t global mutex ; int global sum ; void t h r e a d f u n ( void arg ) int num ; int i n t e r v a l ; num = 1 0 ; i n t e r v a l = ( int ) arg ; while (num ) 2

s l e e p ( i n t e r v a l ) ; pthread mutex lock (& global mutex ) ; global sum += 1 ; pthread mutex unlock(& global mutex ) ; p r i n t f ( New Number = %d\n, global sum ) ; p t h r e a d t thread1, thread2, thread3 ; p t h r e a d m u t e x i n i t (&global mutex, NULL) ; p t h r e a d c r e a t e (&thread1, NULL, thread fun, ( void ) 1 ) ; p t h r e a d c r e a t e (&thread2, NULL, thread fun, ( void ) 2 ) ; p t h r e a d c r e a t e (&thread3, NULL, thread fun, ( void ) 3 ) ; p t h r e a d j o i n ( thread1, NULL) ; p t h r e a d j o i n ( thread2, NULL) ; p t h r e a d j o i n ( thread3, NULL) ; pthread mutex destroy(& global mutex ) ; 2. Lag et program som lager 4 ulike typer arbeidstråder. Disse trådene skal simulere produksjon og distrubisjon av en vilkårlig vare. Varen produseres av to ulike deler som må skaffes separat. Dette er oppgaven til de to første trådene som anskaffer hver sin vare og legge den til et delelager. Tiden det tar for innkjøp av de to delene er forskjellig og kan variere fra gang til gang. Den tredje tråden tar regelmessig én av hver av delene fra delelageret og produserer en ny enhet av varen som så blir plassert på lageret. Den siste tråden er ansvarlig for å skaffe kunder og distrubere den produserte varen. Dette er en mer uforutsigbar prosess så her må både tidsintervallet og antallet variere. #define RUNNING 1 #define SHUTDOWN 0 pthread mutex t part1 mutex ; 3

pthread mutex t part2 mutex ; pthread mutex t storage mutex ; int part1 ; int part2 ; int s t o r a g e ; int s t a t u s ; void a c q u i r e p a r t 1 f u n ( void arg ) s l e e p ( rand ( ) % 4 + 1 ) ; pthread mutex lock (&part1 mutex ) ; part1++; p r i n t f ( Acquired new part1 %d\n, part1 ) ; pthread mutex unlock(&part1 mutex ) ; void a c q u i r e p a r t 2 f u n ( void arg ) s l e e p ( rand ( ) % 4 + 1 ) ; pthread mutex lock (&part2 mutex ) ; part2++; p r i n t f ( Acquired new part2 %d\n, part2 ) ; pthread mutex unlock(&part2 mutex ) ; void p r o d u c e i t e m fun ( void arg ) int produce ; produce = 1 ; s l e e p ( 2 ) ; pthread mutex lock (&part1 mutex ) ; i f (! part1 ) produce = 0 ; pthread mutex unlock(&part1 mutex ) ; pthread mutex lock (&part2 mutex ) ; i f (! part2 && produce ) produce = 0 ; 4

pthread mutex unlock(&part2 mutex ) ; i f ( produce ) pthread mutex lock (&part1 mutex ) ; part1 ; pthread mutex unlock(&part1 mutex ) ; pthread mutex lock (&part2 mutex ) ; part2 ; pthread mutex unlock(&part2 mutex ) ; pthread mutex lock (& storage mutex ) ; s t o r a g e ++; p r i n t f ( Produced new item %d\n, s t o r a g e ) ; pthread mutex unlock(& storage mutex ) ; void s e l l i t e m f u n ( void arg ) int n u m s e l l ; s l e e p ( rand ( ) % 10 + 1 ) ; pthread mutex lock (& storage mutex ) ; n u m s e l l = rand ( ) % 3 + 1 ; i f ( n u m s e l l > s t o r a g e ) n u m s e l l = s t o r a g e ; i f ( n u m s e l l ) s t o r a g e = s t o r a g e ; p r i n t f ( Sold %d item%c \n, num sell, n u m s ell > 1? s : ) ; pthread mutex unlock(& storage mutex ) ; char any key ; p t h r e a d t a c q u i r e p a r t 1 t h r e a d, a c q u i r e p a r t 2 t h r e a d ; p t h r e a d t produce item thread, s e l l i t e m t h r e a d ; p t h r e a d m u t e x i n i t (&part1 mutex, NULL) ; p t h r e a d m u t e x i n i t (&part2 mutex, NULL) ; p t h r e a d m u t e x i n i t (&storage mutex, NULL) ; s t a t u s = RUNNING; 5

p r i n t f ( Press ENTER to stop s i m u l a t i o n \n ) ; p t h r e a d c r e a t e (& a c q u i r e p a r t 1 t h r e a d, NULL, a c q u i r e p a r t 1 f u n, NULL) ; p t h r e a d c r e a t e (& a c q u i r e p a r t 2 t h r e a d, NULL, a c q u i r e p a r t 2 f u n, NULL) ; p t h r e a d c r e a t e (& produce item thread, NULL, produce item fun, NULL) ; p t h r e a d c r e a t e (& s e l l i t e m t h r e a d, NULL, s e l l i t e m f u n, NULL) ; s c a n f ( %c, &any key ) ; s t a t u s = SHUTDOWN; p t h r e a d j o i n ( a c q u i r e p a r t 1 t h r e a d, NULL) ; p t h r e a d j o i n ( a c q u i r e p a r t 2 t h r e a d, NULL) ; p t h r e a d j o i n ( produce item thread, NULL) ; p t h r e a d j o i n ( s e l l i t e m t h r e a d, NULL) ; pthread mutex destroy(&part1 mutex ) ; pthread mutex destroy(&part2 mutex ) ; pthread mutex destroy(& storage mutex ) ; 6