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

Podobné dokumenty
Linux a vlákna - Linuxové noviny 8-9/1998. Linuxové noviny 08-09/98

Operační systémy. Cvičení 5: Volání jádra, procesy, vlákna.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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

PB071 Programování v jazyce C

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

Téma 3. Procesy a vlákna

1. Téma 12 - Textové soubory a výjimky

RMI Remote Method Invocation

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

Generické programování

Programování v OS Linux

KTE / ZPE Informační technologie

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

VIII. Seminář Java VIII p.1/36

Vlákna. První jednoduchý program s vlákny:

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Procesy a vlákna (Processes and Threads)

Vlákna. První jednoduchý program s vlákny:

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

1. Programování proti rozhraní

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Více o konstruktorech a destruktorech

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

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

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

Pavel Procházka. 3. prosince 2014

UJO Framework. revoluční architektura beans. verze

Úvod do programovacích jazyků (Java)

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

OS Procesy a vlákna. Tomáš Hudec. Tomas.Hudec@upce.cz.

Soubor jako posloupnost bytů

Regulární výrazy. Vzory

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Algoritmizace a programování

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Abstraktní datové typy: zásobník

Jazyk C# (seminář 6)

5 Rekurze a zásobník. Rekurzivní volání metody

Vláknové programování část V

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Vláknové programování část VI

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Algoritmizace a programování

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Distribuované systémy a výpočty

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod do programování - Java. Cvičení č.4

Projekty pro výuku programování v jazyce Java

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

Úvod do programovacích jazyků (Java)

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

Java a XML. 10/26/09 1/7 Java a XML

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

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Komponenty v.net. Obsah přednášky

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

17. Projekt Trojúhelníky

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Základy programování (IZP)

Přednáška 6. Procesy a vlákna (vznik, stavy, atributy). Signály. Nástroje pro práci s procesy a vlákny. Úvod do Operačních Systémů Přednáška 6

Vláknové programování část I

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Stavy procesů. Požadavky na OS při práci s procesy

Procesy a vlákna. A3B33OSD (J. Lažanský) verze: Jaro 2014

JSR tutorial 2 Transformace v JSR-184

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

Jazyk C# (seminář 5)

Objektově orientované programování

7. Dynamické datové struktury

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

Java Výjimky Java, zimní semestr

Seminář Java II p.1/43

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Vytváření a použití knihoven tříd

Vícevláknové aplikace

Konstruktory a destruktory

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

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Datové struktury. alg12 1

Stavy procesů. Požadavky na OS při práci s procesy

Vláknové programování část III

Ukázka zkouškové písemka OSY

Java Enum Java, zimní semestr ,2017 1

Programování v Javě I. Únor 2009

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

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

Struktura programu v době běhu

20. Projekt Domácí mediotéka

Transkript:

Procesy, vlákna 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 Implementace vláken one-to-one o implementace na úrovni jádra o každé vlákno je pro jádro samostatný proces many-to-one o implementace v uživatelském režimu prostřednictvím systémové knihovny o malá režie přepínání vláken o problém s během na multiprocesorovém systému (vlákna neběží zároveň) many-to-many o kombinace Linux první model volání jádra clone(2) nepoužíváno přímo, ale prostřednictvím knihoven obhospodařujících vlákna (libpthread) Tvorba vlákna a jeho ukončení Vytvoření vlákna - pthread_create Předčasné ukončení - pthread_exit Čekání na ukončení vlákna - pthread_join

Parametry funkce pthread_create int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); př.: pthread_create(&thread_id, NULL, &print_x, NULL); volání funkce se vrací okamžitě a původní vlákno pokračuje dále nové vlákno začíná realizovat kód, obsažený ve funkci vlákna 1. Ukazatel na proměnnou typu pthread_t, do které se uloží identifikační číslo nově vytvořeného vlákna. 2. Ukazatel na objekt atribut vlákna (thread attribute). Tento objekt obsahuje detailní informace o tom, jak má vlákno komunikovat se zbývajícími komponentami programu. Pokud prostřednictvím tohoto parametru předáte NULL, budou nastaveny implicitní atributy. 3. Ukazatel na funkci vlákna. Jedná se o obyčejný ukazatel na funkci typu: 4. void *(*) (void *) 5. Argument vlákna pro přenos dat typu void *. Pomocí tohoto argumentu můžete předávat funkci jakákoliv data.

Příklad #include <pthread.h> #include <stdio.h> /* Funkce vlákna - tiskne písmena x do stderr. Parametr není používán. Funkce se nevrací. */ void *print_x(void *unused) while(1) fputc('x', stderr); return(null); int main() pthread_t thread_id; /* Vytvoří nové vlákno. Nové vlákno bude vykonávat funkci print_x(). */ pthread_create(&thread_id, NULL, &print_x, NULL); /* Tiskne písmena o do stderr. */ while(1) fputc('o', stderr); return(0); Přeložení příkladu: gcc -lpthread -o vlakna1 vlakna1.c

Další informace: Seriál na rootu o vláknech v C. http://www.root.cz/clanky/programovani-podlinuxem-tema-vlakna/ Tutoriál k POSIX threadům http://www.yolinux.com/tutorials/linuxtutorialposixthreads.ht ml Synchronizace Mutexy blokuje přístup k proměnné jiným threadům Join čekání na dokončení jiného vlákna Podmínkové proměnné Mutex pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter=0; void functionc() pthread_mutex_lock( &mutex1 ); counter++ pthread_mutex_unlock( &mutex1 );

Příklad mutex: #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *functionc(); pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter = 0; main() int rc1, rc2; pthread_t thread1, thread2; if( (rc1=pthread_create( &thread1, NULL, &functionc, NULL)) ) printf("neslo vytvořit vlákno: %d\n", rc1); if( (rc2=pthread_create( &thread2, NULL, &functionc, NULL)) ) printf("nešlo vytvořit vlákno: %d\n", rc2); /* Ćekáme na dokončení vláken.*/ /* Jinak riskujeme exit a ukončení všech vláken */ /* před jejich dokončením. */ pthread_join( thread1, NULL); pthread_join( thread2, NULL); exit(0); void *functionc() pthread_mutex_lock( &mutex1 ); counter++; printf("counter value: %d\n",counter); pthread_mutex_unlock( &mutex1 );

Podmínkové proměnné Proměnná typu pthread_cond_t Thread pozastaví vykonávání, dokud nějaká podmínka není true Rozebrat a odzkoušet tento příklad (conditional variables) http://www.yolinux.com/tutorials/linuxtutorialposixthreads.html Thready v Javě http://java.sun.com/docs/books/tutorial/essential/threads/timer.html implementace Oddědit od třídy Thread, přepsat metodu run, spustit zavoláním start public class SimpleThread extends Thread public SimpleThread(String str) super(str); public void run() for (int i = 0; i < 10; i++) System.out.println(i + " " + getname()); try sleep((long)(math.random() * 1000)); catch (InterruptedException e) System.out.println("DONE! " + getname()); public class TwoThreadsTest public static void main (String[] args) new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start();

Implementace Runnable interface (nutné pokud naše třída musí dědit od jiné podtřídy) http://cretesoft.com/archive/newsletter.do?issue=101 http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html http://www.yolinux.com/tutorials/linuxtutorialposixthreads.html