Programowanie wielowątkowe. Jarosław Kuchta

Podobne dokumenty
Programowanie współbieżne. Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API.

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie komputerów

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Współbieżność w środowisku Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Język Java wątki (streszczenie)

Aplikacje w Javie- wykład 11 Wątki-podstawy

Java. Programowanie Obiektowe Mateusz Cicheński

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Zaawansowane programowanie w C++ (PCP)

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Kurs programowania. Wykład 8. Wojciech Macyna

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Język Java wątki (streszczenie)

Wielozadaniowość w systemie Microsoft Windows

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

Systemy Rozproszone - Ćwiczenie 4

Podstawy współbieżności

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Temat zajęć: Tworzenie i obsługa wątków.

Programowanie obiektowe

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Współbieżność w Javie

Wątki w MFC. Proces - egzemplarz wykonywania aplikacji Wątek (thread) ścieżka wykonywania w aplikacji

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Laboratorium 1 - Programowanie proceduralne i obiektowe

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Wstęp. Ale po co? Implementacja

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

1 Atrybuty i metody klasowe

Mechanizmy pracy równoległej. Jarosław Kuchta

Kurs WWW. Paweł Rajba.

Współbieżność w Javie

Podstawy i języki programowania

Język ludzki kod maszynowy

Model pamięci. Rafał Skinderowicz

Programowanie w Ruby

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Przetwarzanie równoległe i współbieżne

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

Program współbieżny jest zbiorem sekwencyjnych PROGRAMOWANIE C++

Spis treści. 1 Java T M

Aplikacja Sieciowa wątki po stronie klienta

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Programowanie równoległe i asynchroniczne w C# 5.0 / Mateusz Warczak [et al.]. Gliwice, cop Spis treści

Plan prezentacji: 1. Czym jest proces? 2. Czym jest wątek? 3. Funkcje do zarządzania wątkami w Win32API. 4. Mechanizmy synchronizacji wątków

Programowanie obiektowe

Programowanie obiektowe

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

Programowanie obiektowe

msgbox("akcja: Początek, argument: " + argument.tostring()); Thread.Sleep(1000); //opóźnienie msgbox("akcja: Koniec"); return DateTime.Now.

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Klasy i obiekty cz II

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Procesy, wątki i zasoby

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Programowanie obiektowe

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

Programowanie obiektowe

Aplikacja wielow tkowa prosty komunikator

MATERIAŁY DO ZAJĘĆ II

Dokumentacja do API Javy.

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Programowanie i projektowanie obiektowe

Diagramy klas. dr Jarosław Skaruz

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Microsoft IT Academy kurs programowania

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Multimedia JAVA. Historia

Klasy abstrakcyjne i interfejsy

PROGRAMOWANIE W ŚRODOWISKU FLASH wykład 2

Metody Metody, parametry, zwracanie wartości

Programowanie współbieżne i rozproszone

Java: interfejsy i klasy wewnętrzne

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania obiektowego

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Programowanie współbieżne Wykład 2. Rafał Skinderowicz

Wprowadzenie do języka Java

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie współbieżne Laboratorium nr 11

1. Wprowadzenie do C/C++

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

Programowanie współbieżne Wykład 6. Iwona Kochaoska

Metodyka programowania. Podstawy C#

Transkrypt:

Programowanie wielowątkowe Jarosław Kuchta

Procesy i wątki w systemie Windows Windows jest systemem wielowątkowym. Każdy proces ma przynajmniej jeden wątek, chociaż może mieć wiele wątków. Start programu, to start głównego wątku procesu. Główny wątek może uruchomić inny, poboczny wątek. Zamknięcie programu, to zamknięcie wszystkich wątków procesu.

Programowanie wielowątkowe w Start programu: języku C main(), wmain() w programie konsoli WinMain(), wwinmain() w programie okienkowym Procedura osobnego wątku: void ThreadProc(void *param) _endthread(); // zakończenie wątku

Funkcje sterujące wątkami zadeklarowane w process.h: _beginthread rozpoczęcie wątku _beginthreadex rozszerzone rozpoczęcie wątku _endthread zakończenie wątku _endthreadex rozszerzone zakończenie wątku

Przykład funkcja wątku void ThreadProc(void *param) // ten wątek po prostu wypisuje parametr int h=*((int*)param); printf("%d Thread is Running!\n",h); _endthread();

Przykład funkcja główna int main() int n; int i; int val = 0; HANDLE handle; printf("\t Thread Demo\n"); printf("enter the number of threads : "); scanf("%d",&n); for(i=1;i<=n;i++) val = i; handle = (HANDLE) _beginthread( ThreadProc,0,&val); // utworzenie wątku WaitForSingleObject(handle,INFINITE); // oczekiwanie na zakończenie wątku return 0;

Programowanie wielowątkowe w MFC Hierarchia klas MFC: CObject obiekt abstrakcyjny CCmdTarget obiekt aktywny CWinThread wątek Windows CWinApp aplikacja Windows Aplikacja Windows jest wątkiem! Dwa rodzaje wątków: User Interface wątek oparty o okna Worker wątek pracujący w tle

Użyteczne dane m_nthreadid identyfikator bieżącego wątku m_hthread uchwyt bieżącego wątku m_bautodelete czy wątek ma się sam usunąć po zamknięciu?

Funkcje wątkowe Funkcje globalne: AfxBeginThread utworzenie wątku AfxEndThread zamknięcie wątku Metody obiektowe: CreateThread utworzenie i wystartowanie wątku SuspendThread zawieszenie wątku (inkrementacja licznika zawieszeń) ResumeThread wznowienie wątku (dekrementacja licznika zawieszeń) SetThreadPriority ustawienie priorytetu wątku GetThreadPriority pobranie priorytetu wątku

Priorytety wątków THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_ABOVE_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_IDLE

Przykład z użyciem funkcji Afx CwinThread *pthread = AfxBeginThread( ThreadFunction, &data); UINT ThreadFunction(LPVOID param) DWORD result =0 ; // do somthig AfxEndThread(exitCode); return result;

Kończenie wątku funkcja TerminateThread() funkcja ExitThread() instrukcja return zalecana, pozostałe nie czyszczą stosu.

Programowanie wielowątkowe w C# // współdzielona zmienna private string _threadoutput = ""; (1) // funkcja pierwszego wątku void DisplayThread1() while (_stopthreads == false) Console.WriteLine("Display Thread 1"); _threadoutput = "Hello Thread1"; Thread.Sleep(1000); // symulacja działania pierwszego wątku Console.WriteLine("Thread 1 Output --> 0", _threadoutput);

Programowanie wielowątkowe w C# (2) // funkcja drugiego wątku void DisplayThread2() while (_stopthreads == false) Console.WriteLine("Display Thread 2"); _threadoutput = "Hello Thread2"; Thread.Sleep(1000); // symulacja działania drugiego wątku Console.WriteLine("Thread 2 Output --> 0", _threadoutput);

Programowanie wielowątkowe w C# - inicjacja wątków Class1() // utworzenie dwóch wątków Thread thread1 = new Thread(new ThreadStart(DisplayThread1)); Thread thread2 = new Thread(new ThreadStart(DisplayThread2)); // wystartowanie wątków thread1.start(); thread2.start();

Wynik Współdzielona zmienna jest asynchronicznie nadpisywana

Synchronizacja przez lock (1) // współdzielona zmienna private string _threadoutput = ""; // funkcja pierwszego wątku void DisplayThread1() while (_stopthreads == false) lock (this) // blokada na własnej instancji Console.WriteLine("Display Thread 1"); _threadoutput = "Hello Thread1"; Thread.Sleep(1000); // symulacja działania pierwszego wątku Console.WriteLine("Thread 1 Output --> 0", _threadoutput);

Synchronizacja przez lock (2) // funkcja drugiego wątku void DisplayThread2() while (_stopthreads == false) lock(this) // blokada na własnej instancji Console.WriteLine("Display Thread 2"); _threadoutput = "Hello Thread2"; Thread.Sleep(1000); // symulacja działania drugiego wątku Console.WriteLine("Thread 2 Output --> 0", _threadoutput);

Wynik (po synchronizacji)

Synchronizacja przez AutoResetEvent (1) // zmienne sygnałowe do wzajemnego odblokowywania AutoResetEvent _blockthread1 = new AutoResetEvent(false); AutoResetEvent _blockthread2 = new AutoResetEvent(true); void DisplayThread_1() while (_stopthreads == false) // pierwszy wątek czeka, gdy drugi działa _blockthread1.waitone(); // po wołaniu Set przez drugi wątek, pierwszy kontynuuje działanie Console.WriteLine("Display Thread 1"); _threadoutput = "Hello Thread 1"; Thread.Sleep(1000); // symulacja działania pierwszego wątku Console.WriteLine("Thread 1 Output --> 0", _threadoutput); // zakończenie działania odblokowanie drugiego wątku _blockthread2.set();

Synchronizacja przez AutoResetEvent (2) void DisplayThread_2() while (_stopthreads == false) // drugi wątek czeka, gdy pierwszy działa _blockthread2.waitone(); // po wołaniu Set przez pierwszy wątek, drugi kontynuuje działanie Console.WriteLine("Display Thread 2"); _threadoutput = "Hello Thread 2"; Thread.Sleep(1000); // symulacja działania drugiego wątku Console.WriteLine("Thread 2 Output --> 0", _threadoutput); // zakończenie działania odblokowanie pierwszego wątku _blockthread1.set();