Zaawansowane programowanie w C++ (PCP)

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

Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Kurs programowania. Wykład 8. Wojciech Macyna

Język Java wątki (streszczenie)

Programowanie komputerów

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

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

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

4. Procesy pojęcia podstawowe

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

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

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

4. Procesy pojęcia podstawowe

Programowanie wielowątkowe. Jarosław Kuchta

Podstawy Programowania

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Zaawansowane programowanie w języku C++ Klasy w C++

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

Programowanie w języku C++

Zaawansowane programowanie w C++ (ZPR)

Język Java wątki (streszczenie)

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Mechanizm dziedziczenia

4. Procesy pojęcia podstawowe

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

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Programowanie wielowątkowe. Tomasz Borzyszkowski

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Zaawansowany kurs języka Python

9. Problem wzajemnego wykluczania i sekcji krytycznej

Wprowadzenie do programowania współbieżnego

Projektowanie oprogramowania systemów WĄTKI I SYNCHRONIZACJA

Zaawansowane programowanie w C++ (PCP)

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Wykład 4: Klasy i Metody

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne i rozproszone

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Podstawy Programowania

Przetwarzanie Równoległe i Rozproszone

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Zaawansowane programowanie w języku C++

Wątki w Javie. Piotr Tokarski

Programowanie współbieżne Wykład 2. Iwona Kochańska

Wykład 8: klasy cz. 4

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Kompilator języka C na procesor 8051 RC51 implementacja

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

5. Model komunikujących się procesów, komunikaty

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

Programowanie obiektowe

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy programowania współbieżnego. 1. Wprowadzenie. 2. Podstawowe pojęcia

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Podstawy programowania obiektowego

Zaawansowane programowanie w C++ (PCP)

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

ξ II.UWr Wprowadzenie do STM

Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Systemy operacyjne III

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

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

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

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

1 Podstawowe definicje i pojęcia współbieżności

Dziedziczenie jednobazowe, poliformizm

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Instrukcja laboratoryjna cz.3

ZASADY PROGRAMOWANIA KOMPUTERÓW

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

System operacyjny MACH

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Spis treści. Wprowadzenie 15

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Java. Programowanie Obiektowe Mateusz Cicheński

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

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

Opis efektów kształcenia dla modułu zajęć

Transkrypt:

Wykład 10 - boost Thread. 8 czerwca 2007

Równoległość bardzo wolna reakcja człowieka wolne urządzenia wejścia - wyjścia (np. drukarki) bardzo szybkie procesory można przeprowadzać obliczenia podczas obsługi urządzeń Pojęcie równoległości: na platformach jednoprocesorowych (jednordzeniowych) na platformach wieloprocesorowych (wielordzeniowych) wieloprocesowe systemy operacyjne

Aplikacje wielowątkowe Wątek ( lekki proces ), pozwala realizować niezależne ciągi instrukcji w ramach procesu. Wątki współdzielą kod i dane (przestrzeń adresową) oraz zasoby. lepiej wykorzystuje dostępną moc obliczeniową pozwalają na obsługę wielu zleceń równolegle mechanizm nie wprowadza dużych narzutów. Stany wątku gotowy wykonywany zatrzymany blokowany

wątki (2) Współdzielone są: zmienne statyczne i globalne sterta (heap) i zmienne dynamiczne (adres jest unikalny niezależnie od wątku) obiekty automatyczne (na stosie) jeżeli dostęp jest przez wskaźnik lub referencje zasoby systemu operacyjnego (pliki, okna itp) kod wykonywany Niezależne są: rejestry, ciąg wykonywanych instrukcji, stos zmienne automatyczne Program ma zawsze jeden wątek (funkcja main() ) - wątek główny lub inicjujący. Może tworzyć dodatkowe wątki.

Wątki a C++ C++ jest przygotowany do implementacji aplikacji wielowątkowych większość funkcji z biblioteki standardowej może być bezpiecznie używana w różnych wątkach należy używać bibliotek przeznaczonych do pracy wielowątkowej (np. obsługa sterty) zabronione funkcje (przechowują stan pomiędzy wołaniami) rand (<cstdlib>) strtok (<cstring>) asctime, ctime, gmtime, localtime (<ctime>) standard języka nie dostarcza mechanizmów tworzenia i synchronizacji wątków

boost::thread - wątki w C++ #include <boost/thread/thread.hpp> //Funkcja główna wątku użytkownika void my_thread() { /*... */ } //Można też użyć funktora class MyThread { public: //tutaj implementacja funkcji wątku użytkownika void operator()() { /*... */ } }; int main() { boost::thread thrd(&my_thread); //Utworzenie i uruchomienie wątku thrd.join(); //Biezacy watek czeka na zakonczenie watku thrd }

Problemy z programowaniem równoległym wyścigi (race conditions): wiele wątków pisze lub czyta tę samą pamięć niewłaściwa wartość ( niezdefiniowane zachowanie ). watek 1 watek 2 nr:12 wolne znajduje wolne miejsce znajduje wolne miejsce nr:12 zajęte klient1 rezerwuje miejsce rezerwuje miejsce czas nr:12 zajęte klient2 rozwiązanie problemu: synchronizacja (blokady)

Blokady w boost mutex (mutual-execution) jest używany do szeregowania dostępu do zasobu. Stany: zablokowany, odblokowany. //Utworzenie obiektu służącego do synchronizacji boost::mutex mutex_resource; /*... */ { //scoped_lock - zdobywanie jest inicjacją, //konstruktor: lock, destruktor: unlock boost::mutex::scoped_lock scoped_lock(mutex_resource); //Tutaj dostęp do zasobu }//Tutaj zwolnienie zasobu boost::mutex boost::try_mutex boost::timed_mutex boost::read_write_mutex boost::try_read_write_mutex boost::timed_read_write_mutex boost::recursive_mutex boost::recursive_try_mutex boost::recursive_timed_mutex

Problemy przy stosowaniu blokad zakleszczenia (deadlock) zagłodzenia (starvation) Watek 1 Watek 2 blokuj A blokuj B blokuj B czeka na zwolnienie B blokuj A czas czeka na zwolnienie A

problemy z usuwaniem błędów w aplikacjach wielowątkowych niektóre błędy są niepowtarzalne różne zachowanie się wersji debug od release debugger potrzebuje specjalnego wsparcia aby pokazać stany wątków testy na platformach z jednym procesorem (rdzieniem) mogą nie pokazywać błędów które wystąpią na platformach posiadających wiele procesorów (rdzieni) trudno testować wszystkie możliwe przebiegi sterowania

Typowe kończenie wątku nie ma możliwości przerwania wątku z zewnątrz class MyThread { public: MyThread() : finish_(false) {} void finish() { finish_ = true; } void operator()() { while(!finish_) { /* tutaj część przetwarzania */ /* a następnie sprawdzanie warunku!finish_ */ } } private: volatile bool finish_; };

Podsumowanie aplikacje wielowątkowe są coraz bardziej powszechne boost zapewnia obiekty reprezentujące wątki oraz mechanizmy synchronizacyjne wątki i mechanizm wyjątków