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

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

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

Zaawansowane programowanie w C++ (PCP)

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

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

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

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

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

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

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

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

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

Systemy Operacyjne 2: Wątki pthreads. dr inż. Arkadiusz Chrobot

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

Synchronizacja procesów i wątków

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

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

I.Wojnicki, Tech.Inter.

Projektowanie oprogramowania systemów WĄTKI I SYNCHRONIZACJA

9. Problem wzajemnego wykluczania i sekcji krytycznej

Wstęp do programowania 2

synchronizacji procesów

Bazy danych w sterowaniu

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

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

synchronizacji procesów

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

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

Implementacje zgodne z tym standardem są nazywane wątkami POSIX lub Pthreads.

Systemy operacyjne III

Systemy operacyjne. Zajęcia 11. Monitory

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

Problemy współbieżności

Nazwa Wydziału Nazwa jednostki prowadzącej moduł Nazwa modułu kształcenia Kod modułu Język kształcenia Efekty kształcenia dla modułu kształcenia

Wprowadzenie do programowania współbieżnego

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

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

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

Język Java wątki (streszczenie)

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Konstruktor destruktor Programowanie obiektowe

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

Synchronizacja procesów

Wykład 5: Klasy cz. 3

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

STRATEGIE NISKOPOZIOMOWEGO PROGRAMOWANIA WSPÓŁBIEŻNEGO PLATFORMY.NET

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Kamil Wróbel* Politechnika Lubelska, Instytut Informatyki, Nadbystrzycka 36B, Lublin, Polska

10. Programowanie obiektowe w PHP5

Programowanie komputerowe. Zajęcia 7

Język programowania. Andrzej Bobyk

Programowanie wielowątkowe. Tomasz Borzyszkowski

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie komputerów

Synchronizacja procesów

Systemy Czasu Rzeczywistego (SCR)

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

9. Problem wzajemnego wykluczania i sekcji krytycznej

Wykład 8: klasy cz. 4

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Enkapsulacja, dziedziczenie, polimorfizm

Kurs języka Python. Wątki

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

Podstawy współbieżności

4. Procesy pojęcia podstawowe

Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Prezentacja systemu RTLinux

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

Gdy kilka procesów czyta a przynajmniej jeden dokonuje zapisu wynik odczytu zależeć może od sposobu realizacji przeplotu.

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Spis treści. Wprowadzenie 15

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

PARADYGMATY PROGRAMOWANIA Wykład 4

4. Procesy pojęcia podstawowe

Kurs programowania. Wykład 8. Wojciech Macyna

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

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

Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Programowanie współbieżne i rozproszone

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

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Systemowe mechanizmy synchronizacji procesów

Plan wykładu. Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne

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

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

Wielozadaniowość w systemie Microsoft Windows

Podstawy programowania obiektowego

Transkrypt:

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

Sekcja krytyczna Instrukcje wykonywane na zmiennych współdzielonych tworzą sekcję krytyczną. Instrukcje wykonywane przez wątek na zmiennych lokalnych niewpływające na stan globalny noszą nazwę sekcji lokalnej W każdym momencie tylko jeden wątek może znajdować się w sekcji krytycznej. W programie może być wiele niepowiązanych ze sobą sekcji krytycznych Konieczna jest synchronizacja dostępu do sekcji krytycznych, tak aby zapewnić wzajemne wykluczanie wątków / procesów Sekcje krytyczne realizuje się np. z wykorzystaniem muteksów lub semaforów.

Muteksy Mutex (ang. Mutual Exclusion, wzajemne wykluczanie) - element stosowany w programowaniu służący do kontroli dostępu do zasobów niemożliwych do współdzielenia, a więc do realizowania sekcji krytycznych.

Muteksy Implementacja muteksu musi spełniać następujące warunki: Nie może prowadzić do blokady - gdy kilka procesów wyraża chęć wejścia do sekcji krytycznej, jeden z nich musi w końcu wejść. Nie może prowadzić do zagłodzenia - jeśli pewien proces wyraża chęć wejścia do sekcji krytycznej, to musi być w końcu dopuszczony -> UCZCIWOŚĆ! Nie może prowadzić do blokady w przypadku braku współzawodnictwa. Gdy tylko jeden proces wyraża chęć wejścia do sekcji krytycznej, powinien zostać dopuszczony.

Muteksy - klasy Obiekt muteksu jest implementacją blokady w bibliotece standardowej C++11. Klasy: mutex, recursive_mutex, timed_mutex, recursive_timed_mutex Zapewnia implementację operacji wzajemnego wykluczenia (mutual exclusion). Umożliwia ochronę współdzielonych zmiennych przed sytuacją wyścigu (race condition). Wątek pozyskuje muteks (wchodzi do sekcji krytycznej) wywołując na rzecz muteksu metodę lock(). Wątek opuszcza sekcję krytyczną - zwalnia muteks - wywołując metodę unlock().

Muteksy Wątek jest prawidłowo skonstruowany, jeżeli spełnia poniższe warunki: Każda sekcja krytyczna jest skojarzona z niepowtarzalnym obiektem blokady Wątek, próbując wejść do sekcji krytycznej, wywołuje metodę lock() tego obiektu Wątek wychodząc z sekcji krytycznej, wywołuje metodę unlock()

Muteksy przykład 1 http://www.cplusplus.com/reference/mutex/mutex/

Przykład 2 współdzielenie obiektu counter

Przykład 2 współdzielenie obiektu counter

Metody obiektu mutex przy wywołaniu unlock wątek powinien zajmować mutex, ale nie jest to wymagane (wątek może zawołać unlock() nawet jeśli wcześniej nie wołał lock()) jeśli mutex wywoła lock() ponownie, dojdzie do zakleszczenia wątku ze sobą, Metoda try_lock() - próbuje zablokować mutex. W przeciwieństwie do lock(), nie blokuje działania wątku, jeśli mutex jest już zablokowany

Klasa recursive_mutex recursive_mutex mutex może być wielokrotnie zajmowany przez jeden wątek, Wątek zajmuje recursive_mutex od momentu wywołania metody lock lub try_lock Wątek może ponownie zawołać lock lub try_lock Wątek zwalnia recursive_mutex po odpowiedniej liczbie wywołań unclock Jeśli wątek zajmuje recursive_mutex, wszystkie inne wątki mają zablokwany dostęp do zasobu

Klasa timed_mutex timed_mutex udostępnia operacje pozwalające zająć mutex tylko przez określony czas Wątek zajmuje recursive_mutex od momentu wywołania metody lock lub try_lock aż do wywołania unlock Wątek zajmuje recursve_mutex na określony czas za pomocą metod: try_lock_for try_lock_until Jeśli wątek zajmuje timed_mutex, wszystkie inne wątki mają zablokowany dostęp do zasobu

Klasa timed_mutex Metoda try_lock_for Blokuje mutex na okreslony czas do momentu osiagnięcia wartości timeout_duration.zero() przez zmienną timeout_duration, lub do momentu wywołania unlock(). W rzeczywistości funkcja może blokować mutex dłużej niż określa to timeout_duration z powodu opóźnień w obsłudze wątków i dostępu do zasobów Do pomiaru czasu zaleca się uzywanie obiektu steady_clock (zamiast system_clock ) Jeśli metoda wołana jest przez wątek, który już posiada mutex, jej zachowanie jest nieokreślone

Klasa timed_mutex Metoda try_lock_until Blokuje mutex na okreslony czas do momentu określonego przez timeout_time lub do momentu wywołania unlock(). W rzeczywistości funkcja może blokować mutex dłużej niż określa to timeout_time z powodu opóźnień w obsłudze wątków i dostępu do zasobów Jeśli metoda wołana jest przez wątek, który już posiada mutex, jej zachowanie jest nieokreślone

Klasy: lock_guard() i unique_lock() Zwykle nie odwołujemy się bezpośrednio do obiektu klasy std::mutex. Klasy opakowujące (wrapper): std::unique_lock i std::lock_guard robią to w bezpieczny sposób ze względu na obsługę wyjątków Klasy opakowujące to funkcje lub klasy, których zadaniem jest jedynie wywołanie innych funkcji lub metod obiektów, najczęściej związane także z konwersją typów argumentów, z używanych przez aplikację na typy wykorzystywane przez wywoływane funkcje. Jeśli użyjemy lock_guard lub unique_lock, które automatycznie wywołają unlock() w destruktorze, to nie trzeba samodzielnie wołać unlock()

Klasy: lock_guard() i unique_lock() Klasa unique_lock Klasa lock_guard Mogą być używane w odniesieniu do obiektów: mutex, recursive_mutex i timed_mutex Różnica: lock_quard jest bardziej bezpieczną wersją unique_lock. Blokada zakładana jest przez konstruktor i zdejmowana przez destruktor. unique_lock własność mutexu może być zablokowana, odblokowana lub przekazana innemu obiektowi w dowolnym momencie

Przykład 3 timed_mutex i lock_quard

Przykład 4 recursive mutex