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

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

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

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

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

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

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

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);

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

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

Monitory. Jarosław Kuchta

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

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

Wykład 5. Synchronizacja (część II) 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

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

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

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ść w środowisku Java

synchronizacji procesów

4. Procesy pojęcia podstawowe

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

synchronizacji procesów

Programowanie wspóªbie»ne

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

Synchronizacja procesów i wątków

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

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

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

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

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

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

Wielozadaniowość w systemie Microsoft Windows

Problemy współbieżności

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

4. Procesy pojęcia podstawowe

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

Systemy operacyjne. Zajęcia 11. Monitory

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

Podstawy współbieżności

Systemy operacyjne III

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

I.Wojnicki, Tech.Inter.

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

Wprowadzenie do programowania współbieżnego

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

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

Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.4

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

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

Współbieżność w Javie

Współbieżność w Javie

Mechanizmy z grupy IPC

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

Systemowe mechanizmy synchronizacji procesów

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

41. System operacyjny. Postrzeganie systemu operacyjnego przez warstwę oprogramowania użytkowego

Podstawy Informatyki Systemy operacyjne

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

Programowanie współbieżne Zadanie numer 3 Monitory

Programowanie wspóªbie»ne

Synchronizacja procesów

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Podstawy programowania skrót z wykładów:

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

Zaawansowany kurs języka Python

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

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

Synchronizacja procesów

9. Problem wzajemnego wykluczania i sekcji krytycznej

Systemy Operacyjne synchronizacja i komunikacja procesów

Kurs programowania. Wykład 8. Wojciech Macyna

SOP2 - semafory. grudzień

1. Uruchom poniższy program tworzący pojedynczy wątek:

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

4. Procesy pojęcia podstawowe

Wstęp do programowania 2

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Monitory. Wady semafora

Programowanie współbieżne Zadanie nr 4 Spotkania

Systemy Czasu Rzeczywistego (SCR)

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

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

Podstawy programowania komputerów

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

Podstawy programowania w języku C++

1. Procesy i współbieżność

Równoległość i współbieżność

Równoległość i współbieżność

1 Podstawy c++ w pigułce.

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

Podstawy i języki programowania

Algorytmy zarządzania współbieżnym wykonywaniem transakcji część I

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

Transkrypt:

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

Mechanizm synchronizacji wątków/procesów Wykorzystanie semaforów zapobiega niedozwolonemu wykonaniu operacji na określonych danych jednocześnie przez większą liczbę procesów Przez odpowiednie wykorzystywanie semaforów można zapobiec sytuacji w której wystąpi zakleszczenie lub zagłodzenie Pojęcie semafora zostało pierwszy raz zdefiniowane przez holendra Edgara Dijkstrę

mogą być wykorzystywane tam, gdzie zasób dzielony jest na ograniczoną liczbę użytkowników. Semafor działa jak furtka kontrolująca liczbę wątków wykonujących jakiś fragment kodu. Za pomocą semaforów aplikacja może kontrolować na przykład maksymalną liczbę otwartych plików, czy utworzonych okien.

Semafor w praktyce jest liczbą całkowitą, na której możliwe są dwie operace: Wait() Signal() Zapewnienie wzajemnego wykluczania: wait(semaphore) sekcja krytczna signal(semaphore) Po zakończeniu pracy w sekcji krytycznej wątek uwalnia semafor

Praktyczna definicja semafora uogólnionego wg Ben-Ariego: Semafor jest pewną całkowitą liczbą nieujemną S. Opuszczenie (wait) semafora jest równoważne wykonaniu instrukcji: jeśli S>0 to S=S-1, w przeciwnym razie wstrzymaj działanie procesu próbującego opuścić semafor Podniesienie (signal) semafora: jeśli są procesy wstrzymane przy próbie opuszczenia semafora S to wznów jeden z nich, w przeciwnym wypadku S=S+1

Przykład definicji operacji opuszczenia (wait) i podniesienia (signal) semafora sem wait(sem){ if(sem!=0) zmniejsz sem o 1 else czekaj aż sem > 0, wtedy zmniejsz o 1 } signal(sem){ zwiększ sem o 1 jeśli jakieś procesy czekają w kolejce, wznów pierwszy z nich }

Rodzaje semaforów: Semafor binarny Może być tylko w stanie podniesienia lub opuszczenia reprezentowany przez liczbę binarną S { 0, 1} Semaforem binarnym jest mutex! Semafor uogólniony możliwe wiele stanów reprezentowany przez liczbę S { 0, 1,..., } Operacje wykonywane na semaforze są atomowe Semafor można traktować jako licznik, który: jest zmniejszany (zamykany) o 1 gdy jest zajmowany jest zwiększany o 1 gdy jest zwalniany (podnoszony)

Przykład: dostęp do strumienia wyjściowego https://austingwalters.com/multithreading-semaphores/

Semafor trzeba zainicjować wywołując operację podniesienia Semafor skojarzony z danym zasobem jest początkowo ustawiany na wartość równą liczbie dostępnych zasobów tego typu. np. semafor = 5 Proces, który żąda zasobu musi najpierw sprawdzić wartość skojarzonego z tym zasobem semafora - dodatnia wartość semafora oznacza dostępność zasobu. if (semafor > 0) dostęp do zasobów Przed rozpoczęciem korzystania z zasobu proces zmniejsza wartość semafora w sposób niepodzielny. if (semafor > 0) { } semafor--; dostęp do zasobów

Zerowa wartość semafora oznacza, że nie ma wolnych zasobów i proces musi czekać aż proces zajmujący zasób przestanie z niego korzystać i zwiększy wartość semafora zwalniając zasób. Kiedy zasób zostanie zwolniony, pozostałe procesy, które na niego czekały są o tym powiadamiane przez system.

Zmienne warunkowe Aby uniknąć aktywnego odpytywania się o spełnienie określonego warunku, lepiej jest zablokować oczekujący wątek do momentu zajścia zdarzenia (spełnienia oczekiwanego warunku). Mechanizm taki jest wykorzystany w implementacji zmiennych warunkowych (condition variables). Zmienne warunkowe używane są do powiadamiania wątków o zaistnieniu określonego warunku

Zmienne warunkowe

Zmienne warunkowe Powiadomienie o zdarzeniu może zostać zrealizowane przy pomocy dwóch metod: void notify_one() odblokowuje jeden z wątków znajdujących się w stanie oczekiwania po uprzednim wywołaniu na obiekcie zmiennej warunkowej metody wait() void notify_all() odblokowuje wszystkie wątki znajdujące się w stanie oczekiwania

Zmienne warunkowe Biblioteka standardowa C++11 dostarcza dwie implementacje zmiennych warunkowych: std::condition_variable std::condition_variable_any Obie klasy współpracują z muteksem, aby zapewnić prawidłową synchronizację wątków: conditional_variable współpracuje tylko z typem std::mutex conditional_variable_any współpracuje z dowolnym typem muteksu

Zmienne warunkowe Przykład semafory.cpp