Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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.

Podobne prezentacje


Prezentacja na temat: "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."— Zapis prezentacji:

1 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 2..... 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.

2 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.

3 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.

4 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.

5 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.

6 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ę

7 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 ( ).

8 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.

9 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.


Pobierz ppt "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."

Podobne prezentacje


Reklamy Google