Pavel Procházka. 3. prosince 2014

Podobné dokumenty
Jazyk C# (seminář 6)

Procesy a vlákna - synchronizace

Algoritmizace a programování

Principy operačních systémů. Lekce 6: Synchronizace procesů

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Paralelní programování

Jazyk C# (seminář 5)

Jazyk C# (seminář 3)

7. Datové typy v Javě

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Paralelní programování

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, / 23

Paralelní programování

Ukázka zkouškové písemka OSY

2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace

Paralelní programování

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Řídicí struktury. alg3 1

Paralelní programování

Operační systémy. Přednáška 4: Komunikace mezi procesy

PŘETĚŽOVÁNÍ OPERÁTORŮ

Zápis programu v jazyce C#

Služba ve Windows. Služba (service) je program

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Možnosti programování se sdílenými proměnnými. Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV) Procesy a vlákna.

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Z. Kotala, P. Toman: Java ( Obsah )

Vlákna. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Aleš Hrabalík a Martin Hořeňovský, 2016

Operační systémy 2: Zápočtové úkoly

Mnohotvarost (polymorfizmus)

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 11. březen, 2011

Paralelní programování

Paralelní programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C# (seminář 3)

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

03. Synchronizace procesů. ZOS 2006, L. Pešička

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

30. Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (A7B36PVJ)

Seminář Java II p.1/43

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

8 Třídy, objekty, metody, předávání argumentů metod

Jazyk C# (seminář 9)

Generické programování

Úvod do programovacích jazyků (Java)

Procesy a vlákna (Processes and Threads)

Úvod do programovacích jazyků (Java)

Paralelní a distribuované výpočty (B4B36PDV)

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

IRAE 07/08 Přednáška č. 7. Začátek (head)

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Programování v C++ 3, 3. cvičení

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Soubor jako posloupnost bytů

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Principy počítačů a operačních systémů

Synchronizace Mgr. Josef Horálek

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Iterator & for cyklus

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

PB161 Programování v jazyce C++ Přednáška 8

Paralelní a distribuované výpočty (B4B36PDV)

Paměť počítače. alg2 1

Vícevláknové programování na CPU: POSIX vlákna a OpenMP I. Šimeček

C++ 0x aka C++11. Základním kamenem je třída std::thread

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

PB161 Programování v jazyce C++ Přednáška 10

Sekvenční a podmíněné provádění

Java - výjimky. private void vstup() throws IOException {... }

04. Mutexy, monitory. ZOS 2006, L. Pešička

Vzájemné vyloučení procesů

Singleton obsah. Motivace Základní myšlenka Implementace Problémy. Dědičnost Obecná implementace Shrnutí. destrukce vícevláknovost

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

C# konzole Program emoce

Asynchronní programování v.net

Poslední nenulová číslice faktoriálu

Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP.

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

setup() { I = 0; } loop() { I = I + 1; }

Architektury paralelních počítačů II.

Standardní algoritmy vyhledávací.

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Jazyk C# (seminář 7)

Paralelní a distribuované výpočty (B4B36PDV)

Vývoj aplikačních programů pro systémy DAQ Možnosti vývoje aplikačního SW Jazyk C/C++ Pokročilé techniky programování Vícevláknové aplikace

C# konzole Podíl dvou čísel, podmínka IF

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Singleton obsah. n Motivace. n Základní myšlenka. n Implementace. n Problémy. n Dědičnost. n Obecná implementace. n Shrnutí.

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Transkript:

Jazyk C# (seminář 11) Pavel Procházka KMI 3. prosince 2014

Motivace Dnes už se prakticky nedělají jednojádrové procesory pokud potřebujeme výkon, musíme zapojit všechna jádra Často potřebujeme dělat více věcí soubežně například počítat umělou inteligenci na pozadí a přitom vykreslovat Může ale docházet k interferencím například jedno vlákno se pokouší celistvě číst soubor a přitom jiné vlákno ten soubor modifikuje Z důvodu možných interferencí chceme provádět některé úkony nedělitelně atomicky, k tomu slouží synchronizační primitiva Vlákno je z pohledu C# metoda

Vlákna v C# Namespace System.Threading Třída Thread reprezentuje vlákno Konstruktor třídy Thread akceptuje delegát typu ThreadStart nebo ParameterizedThreadStart Delegát ThreadStart očekává metodu vracející void bez argumentů Delegát ParameterizedThreadStart očekává metodu vracející void s jediným argumentem typu object, lze tak předat libovolný počet argumentů Vlákno se spouští metodou Start() nebo jejím přetížením Start( object o ) (podle typu delegátu) Metoda void Abort() násilně ukončuje vlákno Metoda void Join() čeká na dokončení vlákna, jakmile skončí pokračuje se ve vykonávání programu

Ilustrační příklad jaký výstup očekáváme? public static void PutText(){ for( int i = 0 ; i < 5 ; i++ ){ Console.WriteLine ("bar"); public static void Main () { Thread othread = new Thread (new ThreadStart(PutText)); othread.start (); for( int i = 0 ; i < 5 ; i++ ){ Console.WriteLine ("foo"); othread.join();

Jeden z mnoha možných výstupů Proč to tak je? foo foo foo foo bar bar bar foo bar bar

Synchronizační primitiva v C# mutex Mutex (mutual exclusion) je to v podstatě proměnná typu bool, která říká, hodnota false říká, že můžeme vstoupit, hodnota true říká, že už někdo vstoupil a tudíž se musí čekat, až bude volno Nejčastěji se pomocí mutexu zabraňuje vícerý přístup přístup ke sdílenému prostředku Třída Mutex, konstruktor Mutex() nebo Mutex( bool InitiallyOwned ) Metoda ReleaseMutex () pouští mutex používáme kdykoliv už nepotřebujeme pracovat se sdíleným prostředkem, provede atomicky nastavení mutexu na false Metoda WaitOne() čeká až bude mutex false, jakmile uvidí false atomicky nastaví mutex na true a pokračuje se ve vykonávání kódu

Mutex v praxi jaký/jaké očekáváte výstupy? public static Mutex m1 = new Mutex (); public static void PutText(){ m1.waitone (); for( int i = 0 ; i < 5 ; i++ ){ Console.WriteLine ("bar"); m1.releasemutex (); public static void Main () { Thread othread = new Thread ( new ThreadStart(PutText)); othread.start (); m1.waitone (); for( int i = 0 ; i < 5 ; i++ ){ Console.WriteLine ("foo"); m1.releasemutex (); othread.join();

Výstup příkladu s mutexem 2 možné. Proč? 1. 2. bar foo bar foo bar foo bar foo bar foo foo bar foo bar foo bar foo bar foo bar

Klíčové slovo lock kritická sekce Slouží k provedení části kódu atomicky tzn. všechna ostatní vlákna programu jsou zastavena při pokusu o vstup do kritické sekce Obvykle slouží ke stejnému účelu jako mutex Typické je použití pro reententrantní metody chceme zajistit, aby stejnou metodu bylo možné volat z více vláken (například Console.WriteLine) a nedošlo k interenci Jak jste si mohli všimnout Console.WriteLine nemíchá znaky, ale vypíše atomicky vždy celý řádek Syntaxe je lock( variable ){ BODY

Lock v praxi totéž, co mutex public static object olock = new object (); public static void PutText(){ lock (olock) { for (int i = 0; i < 5; i++) { Console.WriteLine ("bar"); public static void Main () { Thread othread = new Thread (new ThreadStart(PutText)); othread.start (); lock (olock) { for (int i = 0; i < 5; i++) { Console.WriteLine ("foo"); othread.join();

Semafory v C# Semafor je celočíselná proměnná, které limituje počet vláken přistupujících ke sdílenému prostředku Sémantika: vlákno čeká, pokud semafor má hodnotu 0, přestává čekat, jakmile se hodnota zvýší Každé vlákno když se dočká zvýšení semaforu, tak jeho číslo atomicky sníží Jakmile vlákno již nepotřebuje semafor, uvolní jej a dojde k atomickému zvýšení hodnoty o 1 Třída Semaphore, konstruktor Semaphore(int initialcount, int maximalcount) Metoda WaitOne() čeká na zvýšení semaforu na nenulovou hodnotu, jakmile se dočká atomicky sníží semafor o 1 a pokračuje ve vykonávání programu Metoda Release() atomicky inkrementuje semaforu

A ted vy Napište paralelní verzi jednoho z třídících algoritmů, pokuste se o maximální efektivitu Paralelní program srovnejte se sekvenčním na vícejádrovém CPU a ukažte, že paralelní verze je rychlejší