Bariery synchronizacyjne Bariery są obiektami synchronizacyjnymi pakietu pthread służącymi do wyrównywania czasów pracy wątków wykonujących wspólne zadanie.

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Mechanizmy pracy równoległej
Jarosław Kuchta Monitory.
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 6 Wojciech Pieprzyca.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Wykonał : Marcin Sparniuk
Systemy rozproszone W. Bartkiewicz Wykład 9. Wprowadzenie do koordynacji programów współbieżnych.
Semafory Autorzy : Michał Winciorek Łukasz Jackowicz.
Badania operacyjne. Wykład 1
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Programowanie wielowątkowe
Struktury.
Tablice.
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Temat nr 10: System przerwań
Język ANSI C Operacje we/wy
Projektowanie i programowanie obiektowe II - Wykład IV
ZARZĄDZANIE PROCESAMI
Język Java Wielowątkowość.
15. MECHANIZMY SYNCHRONIZACJI WĄTKÓW Większość koncepcji stworzonych na potrzeby synchronizacji procesów ciężkich została zastosowana też do synchronizacji.
Muteksy Muteksy (mutex – MUTual EXclusion) są prostymi obiektami synchronizacyjnymi pełniącymi rolę semaforów binarnych dla wątków (chroniącymi sekcje.
Semafory według normy POSIX
14. WĄTKI Procesy w tradycyjnym sensie (tworzone przez wykonanie funkcji fork) mają przydzielaną oddzielną przestrzeń adresową. W przestrzeni tej jest.
10. PROSTE MECHANIZMY KOORDYNACJI DOSTĘPNE W JĘZYKU C W systemie Unix użytkownikowi (nie będącemu administratorem) nie wolno wykonywać bezpośrednio żadnych.
9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU INTERPRETATORA
Procesy odrębne –Unikatowy PID ( ) –Zmienne –Zbiory deskryptorów plików –Przestrzeń stosu (lokalne zmienne, wywołania funkcji) –Środowisko –Licznik.
Wątki.
Pamięć wspólna Przegląd stosowanych rozwiązań Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008.
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
Systemy Czasu Rzeczywistego
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Metody Programowania Wykład
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
PROGRAMOWANIE SYSTEMOWE [2/3]
Tworzenie nowych kont lokalnych i domenowych, oraz zarządzanie nimi
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
Systemy operacyjne.
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Problem sekcji krytycznej
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014
Modelowanie obiektowe Diagramy czynności
Wykład 7 Synchronizacja procesów i wątków
W ą t e k (lekki proces) thread.
PL/SQL – dalsza wędrówka
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
Kurs języka C++ – wykład 4 ( )
Diagram czynności Diagram czynności (activity diagram) służy do modelowania dynamicznych aspektów systemu. Diagram czynności przedstawia sekwencyjne lub.
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Zasady arytmetyki dwójkowej
Model współbieżności w Javie autor: Grzegorz Szuba.
Model współbieżności w Javie
Zestaw pytań nr. 3 Typy generyczne Wyjątki OPRACOWALI: JAKUB GRYCZEWSKIKINGA ROSA DANIEL KAPTEJNYWOJCIECH ŁĘCZYCKI
Wstęp do programowania Wykład 7
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Wątki, programowanie współbieżne
Programowanie Obiektowe – Wykład 2
Haskell Składnia funkcji.
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Bariery synchronizacyjne Bariery są obiektami synchronizacyjnymi pakietu pthread służącymi do wyrównywania czasów pracy wątków wykonujących wspólne zadanie obliczeniowe, przed przejściem do kolejnego etapu tego zadania. start koniec I etapu koniec II etapu... wątek 1 wątek wątek n t Dojście do bariery ostatniego wątku w zespole powoduje uwolnienie wszystkich wątków i jednoczesne podjęcie przez nie pracy na kolejnym etapie przetwarzania.

Bariery nie identyfikują poszczególnych wątków wchodzących w skład danego zespołu – potrafią jedynie liczyć wątki dochodzące do bariery (czyli wywołujące odpowiednią funkcję po zakończeniu danego etapu obliczeń). int pthread_barrier_init (pthread_barrier_t *bariera, const pthread_barrierattr_t *atrybuty, unsigned int licznik); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu bariera – wskaźnik na inicjowaną barierę atrybuty – wskaźnik na obiekt atrybutów (jeśli jest NULL, przyjmowane są atrybuty domyślne) licznik – liczba wątków, które mają być zsynchronizowane przez barierę Działanie: inicjuje barierę i ustawia jej licznik. Uwaga: działanie funkcji jest nieokreślone, jeśli bariera już wcześniej została zainicjowana.

int pthread_barrier_wait (pthread_barrier_t *bariera); Zwraca: w przypadku sukcesu wartość PTHREAD_BARRIER_SERIAL_THREAD jednemu (losowo wybranemu) wątkowi, a 0 wszystkim pozostałym dodatni kod w przypadku błędu bariera – wskaźnik na (zainicjowaną) barierę Działanie: zawiesza wywołujący wątek, jeśli liczba wątków, które wywołały tę funkcję w odniesieniu do danej bariery, nie osiągnęła jeszcze wartości licznika. Jeśli bieżące wywołanie było ostatnim brakującym, uwalnia wszystkie zawieszone wątki i przywraca barierę do stanu, jaki miała po ostatnim (chronologicznie) wywołaniu funkcji pthread_barrier_init ( ). Uwaga: Zwrócenie innej, niż 0, wartości jednemu z uwolnionych wątków umożliwia zniszczenie bariery i ewentualne ponowne zainicjowanie jej innymi parametrami tylko jednemu wątkowi.

int pthread_barrier_destroy (pthread_barrier_t *bariera); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu bariera – wskaźnik na (zainicjowaną) barierę Działanie: jeśli pod barierą nie jest zawieszony żaden wątek, zwalnia zasoby związane z daną barierą, (jeśli były one przydzielone dynamicznie), w przeciwnym przypadku zwraca błąd. Uwaga: działanie funkcji nie jest zdefiniowane, jeśli bariera nie została wcześniej zainicjowana.

Blokady zapisu/odczytu Blokady zapisu/odczytu są mechanizmami synchronizacji wątków przeznaczonymi do implementacji rozwiązań problemu czytelników i pisarzy. Wbrew temu, co mogłaby sugerować ich nazwa, nie mają bezpośrednio nic do czynienia z operacjami wejścia/wyjścia w programie, a jedynie stanowią swojego rodzaju uogólnienie pojęcia semafora. Wątki pełniące rolę czytelników lub pisarzy w programie nie posiadają żadnych atrybutów, na podstawie których blokada mogłaby je rozróżnić – różnią się jedynie rodzajami wywoływanych funkcji. Ogólna zasada działania blokady jest następująca: - blokadę może zamknąć wielu czytelników (zachowuje się ona wtedy tak, jak muteks rekurencyjny), ale tylko jeden pisarz (zachowuje się ona wtedy tak, jak muteks szybki); - każde otwarcie blokady uwalnia spod niej jeden wątek (jeśli były pod nią jakieś zablokowane, jeśli nie było, blokada pozostaje otwarta); - jeśli wśród zablokowanych wątków są zarówno czytelnicy, jak i pisarze, pierwszeństwo mają pisarze.

int pthread_rwlock_init (pthread_rwlock_t *blokada, const pthread_rwlockattr *atrybuty); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu blokada – wskaźnik na blokadę zapisu/odczytu atrybuty – wskaźnik na obiekt atrybutów (jeśli jest NULL, przyjmowane są atrybuty domyślne) Działanie: inicjuje blokadę zapisu/odczytu. int pthread_rwlock_rdlock (pthread_rwlock_t *blokada); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu blokada – wskaźnik na (zainicjowaną) blokadę

Działanie: rejestruje w blokadzie zamknięcie, jeśli blokada była otwarta lub zamknięta wcześniej przez czytelników; zawiesza wątek pod blokadą, jeśli blokada była wcześniej zamknięta przez pisarza. int pthread_rwlock_wrlock (pthread_rwlock_t *blokada); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu blokada – wskaźnik na (zainicjowaną) blokadę Działanie: zamyka blokadę, jeśli była wcześniej otwarta; zawiesza wątek pod blokadą, jeśli blokada była wcześniej zamknięta (przez czytelników lub przez pisarza). Uwaga: funkcje pthread_rwlock_rdlock ( ) i pthread_rwlock_wrlock ( ) mają swoje nieblokujące odpowiedniki pthread_rwlock_tryrdlock ( ) i pthread_rwlock_trywrlock ( ).

int pthread_rwlock_unlock (pthread_rwlock_t *blokada); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu blokada – wskaźnik na (zainicjowaną) blokadę Działanie: uwalnia jeden z zawieszonych wątków spod blokady (reguły wyboru wątku mogą być zależne od implementacji i skomplikowane, zazwyczaj pisarze mają pierwszeństwo przed czytelnikami); jeśli nie ma żadnych zawieszonych wątków, blokada zostaje otwarta. Uwaga: skutki próby otwarcia otwartej blokady mogą być nieokreślone.

int pthread_rwlock_destroy (pthread_rwlock_t *blokada); Zwraca: 0 w przypadku sukcesu dodatni kod w przypadku błędu blokada – wskaźnik na (zainicjowaną) blokadę Działanie: jeśli pod blokadą nie jest zawieszony żaden wątek, zwalnia zasoby związane z daną blokadą (jeśli były one przydzielone dynamicznie), w przeciwnym przypadku zwraca błąd. Uwaga: działanie funkcji nie jest zdefiniowane, jeśli blokada nie była wcześniej zainicjowana.