• Nie Znaleziono Wyników

Laboratorium 8 - Wątki Pobierz plik lab8.tar.gz i rozpakuj go.

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium 8 - Wątki Pobierz plik lab8.tar.gz i rozpakuj go."

Copied!
1
0
0

Pełen tekst

(1)

Programowanie systemowe 2006/2007 Studia zaoczne

Laboratorium 8 - Wątki

Pobierz plik lab8.tar.gz i rozpakuj go.

Zadanie 1.

a) Zapoznaj się z programem hello-multi.c. Jak skompilować ten program? Które funkcje pochodzą z biblioteki pthread? Jakie jest ich zadanie? Uruchom program i wyjaśnij jego działanie.

b) Zmodyfikuj ten program tak, aby wątek, który wyświetlał "hello" rozpoczynał wątek, który drukuje

"world\n". Który wątek czeka na wątek "world\n" aby go przyłączyć? Dlaczego?

Zadanie 2.

Napisz program, którego zadaniem będzie uruchomienie jednego wątku, który będzie wyświetlał 10 kolejnych liczb całkowitych. Po wyświetleniu każdej liczby ma odczekać 1 sekundę, zanim przejdzie do wyświetlenia kolejnej liczby. Porównaj trzy wersje tego programu: wątek główny czeka na zakończenie wątku obliczeniowego (pthread_join), wątek główny nie czeka na zakończenie wątku obliczeniowego i jest kończony za pomocą return, wątek główny nie czeka na zakończenie wątku obliczeniowego i jest kończony funkcją pthread_exit.

Zadanie 3.

Zmodyfikuj program z zadania 2 tak, aby wątek otrzymywał informację o tym ile liczb ma wyświetlać.

Zadanie 4.

Napisz program, w którym dwa wątki komunikują się za pomocą zmiennej globalnej. Jeden wątek co sekundę inkrementuje zmienną globalną, zaś drugi wyświetla jej wartość. Czy program będzie zawsze działał poprawnie?

Czy potrzebna jest w tym programie synchronizacja wątków?

Zadanie 5.

Zapoznaj się z niepełną wersją programu twordcount1.c. Zadaniem tego programu jest zliczanie słów w pliku. Zakładamy, że słowo składa się ze znaków alfanumerycznych. Koniec słowa wyznacza pierwszy znak nie alfanumeryczny. Uzupełnij ten program tak, aby zliczał on słowa w plikach podanych w wierszu wywołania i wyświetlał ich sumę. Przyjmij na razie, że program działa na dwóch plikach. Przykład działania:

./zad2 plik1 plik2 12345: slow ogolem

Z jakim problemem musisz się liczyć, jeśli obydwa programy korzystają z tej samej zmiennej globalnej?

Co się będzie działo, jeśli jeden z wątków nie otworzy pliku? Czy jest to dobre rozwiązanie?

Zadanie 6.

Jedną z metod synchronizacji dostępu do zmiennej jest wykorzystanie muteksu. Zmodyfikuj program z zadania 6 tak, aby dostęp do zmiennej globalnej był chroniony za pomocą muteksu.

Zadanie 7.

Innym sposobem jest stosowanie zmiennych przydzielanych wątkom. Zmodyfikuj program z zadania 5 tak, aby każdy wątek działał na swoim liczniku. Wskazówka: utwórz zmienne strukturowe w funkcji głównej dla każdego z wątków. Składowe tych struktur będą zawierać nazwę pliku i licznik słów w pliku.

1

Cytaty

Powiązane dokumenty

These studies show that examined persons have a high level of awareness about the importance of behavior related to broadly defined health, but there is a sig- nificant difference

• Co się dzieje, jeśli podczas obsługi sygnału X pojawi się nowy, taki sam sygnał X?. Czy następny sygnał

• proces macierzysty drukuje otrzymany komunikat. Uwaga: należy utworzyć dwa potoki łączące proces macierzysty i potomny. Zapoznaj się z programem simpleredirect.c. Program ten

Czym różni się szeregowanie zdań w systemie tradycyjnym od szeregowania zadań w systemie czasu rzeczywistego – podaj różnice w celach, które szeregowanie ma spełnić i

W przetargu mogą uczestniczyć osoby fizyczne i prawne, które zapoznają się z pełną treścią ogłoszenia (zamieszczoną na tablicy ogłoszeń w budynku Urzędu Miasta Ruda Śląska

Przedmiotem oddania w drodze ustnego przetargu nieograniczonego w użytkowanie wieczyste na okres 99 lat z przeznaczeniem pod budowę budynku mieszkalnego jednorodzinnego jest

Proces bieżący może czekać na zakończenie innego wątku poprzez wywołanie funkcji pthread_join.. int pthread_join( pthread_t *thread,

Proces bieżący może czekać na zakończenie innego wątku poprzez wywołanie funkcji pthread_join.. int pthread_join( pthread_t *thread, void *status) thread identyfikator wątku