PROCESSPROGRAMMERING Föreläsning 7 - 12.11.2010‏ Innehåll: Trådsäkerhet - Memory consitency error - Guarded blocks - Lock Objects - Immutable Objects -

Slides:



Advertisements
Liknande presentationer
Skapa ett video-CV på YouTube
Advertisements

Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
INTRODUKTION TILL PROGRAMMERING
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Funktioner och programorganisation
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
Föreläsning 1.
Metoder i java Det finns två typer av metoder i java
Inkapsling.
Objektorienterad tänkande
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 ITK:P1 Föreläsning 5 Iteration, slumpning och arrayer DSV Peter Mozelius.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Datasamlingar och generiska enheter
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Att designa parallella program - manuell vs. automatisk parallellisering - Java och ”multi-core”
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Metoder och slingor Metoder och dess typ Slingor med while och for-satser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
1 Windows programmering Programmering med Threads Borland C++ Builder 4 Modsoft Ab Kent Westerholm.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
Föreläsning 14 ”Enkel” Filhantering.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Next previous Innehåll Del 1-trådar Del 2-URLer Del 1: Trådar Föreläsning 8.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Föreläsning 1. Innehåll Introduktion till objektorientering –OOP (objektorienterad programmering) –Objekt, instanser, klasser C++ –OO i C++ –Standardbibliotek.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Föreläsning 4 Klasser Och Objekt.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Programmeringsteknik för K och Media
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Trådsäkerhet - Memory consitency error - Guarded blocks - Lock Objects - Immutable Objects - Atomiska variabler - Datastrukturer med inbyggd trådsäkerhet

Trådsäkerhet Kommunikation mellan trådar via gemensamma variabler kan dock ge upphov till problem, bl.a.: Trådkollision (”thread interference”)‏ ”Memory consitency error”

Memory consistency error Uppstår när olika trådar har olika ”uppfattningar” om vad som borde vara samma data. Tänk dej att en tråd skall spara data i minnet och en annan tråd skall visa innehållet av datat på bildskärmen I detta fall finns det ingenting som garanterar att det data som den första tråden sparade är synligt för den ”visande” tråden. Nyckeln till att förhindra ”memory consitency errors” är att förstå det såkallade ”happens- before” sambandet

Memory consistency error Detta samband garanterar att data som sparas i ett minne av en tråd blir synligt för en annan tråd. För mer detaljerad information se t.ex följande länk: Ett exempel som garanterar ”happens-before” samband är när en “master thread” väntar på att en eller flera “worker threads” skall avsluta med join() eller get() innan master tråden avläser värdet ur den variabel trådarna delar på Ett annat sätt att förhindra ”memory constency errors” är att använda sej av någon typ av synkronisering

Olika sätt att skapa trådsäker kod  Synkroniserade metoder *  Synkroniserade block *  Intrinsic locks *  Guarded blocks  Lock Objects  Immutable Objects  Atomiska variabler * = Dessa har vi behandlat tidigare i kursen

Guarded Blocks Trådar behöver ofta koordinera sina handlingar. Det vanligaste sätter för koordinering är ”guarded blocks” En ”guarded block” börjar med att undersöka ett tillstånd som måste vara ”true” innan blockeringsmekanismen kan fortsätta En massa steg måste gås igenom för att göra detta på rätt sätt.

Guarded Blocks Anta t.ex. att vi har en metod som ser ut enligt följande: public void guardedMethod { //En enkel ”guard” som loopar. Slösar processortid. Dålig lösning!! while(tillstand == false) { } System.out.println(”Nu får vi fotsätta!”); }

Guarded Blocks Ett effektivare sätt att göra ett ”guarded block” är att anropa metoden wait som finns i klassen Object som upphäver eller inaktiverar innevarande tråd. Metoden wait returnerar inte innan en annan tråd har skickat ett typ av meddelande om att en speciell händelse har uppstått. OBS! En händelse som uppstår behöver inte nödvändigtvis vara den händelse som en tråd väntar på! public synchronized guardedMetod() { //Denna guard loopar endast en gång och väntar på en händelse som inte nödv. är den rätta while(tillstand == false) { try { wait(); } catch (InterruptedException e) {} } System.out.println("Nu får vi fortsätta"); }

Guarded Blocks Varför är metoden på föregående slide synkroniserad?? Anta att d är objektet vi använder för att anropa wait. När en tråd anropar d.wait måste tråden vare ägare av intrinsic låset annars uppstår det ett ”error” Genom att anropa wait från en synkroniserad metod får vi den ifrågavarande tråden att ta över intrinsic låset för objektet d När wait anropas lösgör tråden låset och upphäver exekveringen

Guarded Blocks När någonting har hänt och vi som följd igen kan sätta tilsståndsvariabeln till true kommer en annan tråd att informera om detta genom att anropa Object.notifyAll public synchronized meddelaOmAndratTillstand { tillstand = true; notifyAll(); }

Guarded Blocks Låt oss nu använda oss av ”guarded blocks” för att skapa en klassisk producent- konsument applikation. Följande programkod simulerar en producent-konsument applikation som är osynkroniserad: Fundera på hur du kan använda dej av guarded blocks för att synkronisera produktion och konsumtionen. Dvs. konsumenten skall inte få konsumera innan producenten hunnit producera ett färskt slumptal och producenten skall heller inte få producera om inte konsumenten hunnit konsumera det föregående slumptalet.

Lock Objects Synkronisead kod baserar sej på enkla typer av låsmekanismer. Är lätt att anända men har många begränsningar Mer avancerade låsmekanismer finns inbakat i java.util.concurrent.locks paketet Det finns en mängd olika alternativ i detta paket, tillsvidare nöjer vi oss med att se på det vanligaste gränssnittet, Lock Lock-objekt fungerar i det stora hela väldigt lika som intrinsic locks som används av synkroniserad kod

Lock Objects Liksom intrinsic locks kan endast en tråd äga ett Lock-objekt åt gången. Lock-objekt stöder också wait/notify metoderna via sina associerade Condition objekt Den viktigaste fördelen med låsobjekt är dess förmåga att “ta tillbaka” ett försök att överta ett lås Metoden tryLock backar tillbaka om låset inte är tillgängligt (genast eller efter en timeout period)

Lock Objects Metoden lockInterruptibly backar tilbaka om en annan tråd sänt ett avbrott (interrupt) till låset för det objekt som innevarande tråd försöker ta över.

Immutable Objects Ett ”immutable object” eller omodifierbart objket är ett objekt vars status inte kan ändras efter att det skapats Omodifierbara objekt är speciellt användbara i parallellexekverande program Eftersom omodifierbara objekt inte kan ändra status så kan de inte utsättas för trådkollision (thread interference) eller ”avläsas” i ett inkonsitent tillstånd (”memory consistency error”)‏ Låt oss titta på ett exempel på en klass vars objekt är modifierbara (”mutable”), se

Immutable Objects I exemplet används synkroniserade metoder för att undvika memory consistency error (noggrannare beskrivning finns i exemplet)‏ En alternativ lösning är att använda ”immutable objects” se

Atomiska variabler Ett annat sätt att lösa trådkollision- och memory consistency error problemen är använding av atomiska variabler Är en variabel som inte tillåter samtidig access från flera trådar och möjliggör ”happens before ” samband mellan uppdatering och avläsning av variabeln Paketet java.util.concurrent.atomic definierar klasser som stöder atomiska operationer på enskilda variabler: Se föjande länk för mera information:

Synkronisering eller atomiska variabler? I program där vi endast behöver kontrollera åtkomst till en enskild variabel lönar det sej använda atomiska variabler i stället för synkroniserad kod efterom vi på det sättet undviker onödig synkronisering Användning av atomiska variabler är också snabbare och effektivare än synkronisering.

Datstrukturer med inbyggd trådsäkerhet I Java klassbiblioteket finns även datastrukturer där trådsäkerheten är färdigt inbyggd, dvs. där samtidig åtkomst till datastrukturen automatiskt förhindras. Exempel på sådana datastrukturer är: java.utl.Vectorjava.util.concurrent.BlockingQueue......