Laboratorium 6
==============
Watki (PCThreads) 
-----------------
Lektura podstawowa:
      * man do poszczegolnych funkcji z pthread.h  

1. Kompilacja: wywolaj program `make'
2. Uzytkowanie: uruchamianie programow
3. Pliki:

   threaderr.c, threaderr.h
        Obsluga bledow zwiazanych z watkami.  Biblioteka watkow zainstalowana
	na rainbow nie ustawia zmiennej errno gdy nastapi blad i dlatego
	trzeba korzystac z innej funkcji niz syserr. 

   threads.c
        Program ilustruje sposob tworzenia oraz konczenia watkow oraz 
	wspoldzielenie przez nie obszaru danych.  Wywolanie programu bez 
	parametru umozliwia synchronizacje przez oczekiwanie na zakonczenie 
	wszystkich watkow.  Wywolanie programu z dowolnym parametrem wylacza 
	mozliwosc "laczenia sie" watkow. 
        Wazne funkcje:   pthread_create, pthread_join, pthread_exit, 
                         pthread_delay_np, pthread_attr_init, 
                         pthread_attr_destroy oraz 
	                 inne funkcje obslugujace atrybuty watkow. 

   prod_kon.c
	Dwuwatkowy producent-konsument.  Producent wstawia do bufora 10000 
	porcji, a konsument je pobiera i wypisuje na standardowe wyjscie. 
        Program ilustruje sposob uzycia mechanizmu mutexow i warunkow do 
	synchronizacji watkow. 
        Wazne funkcje:  pthread_mutex_init, pthread_mutex_lock, 
		        pthread_mutex_unlock, pthred_mutex_destroy,
		        pthread_cond_init, pthread_cond_wait, 
		        pthread_cond_signal, pthread_cond_broadcast.

   cancel.c
        Program ilustruje sposob konczenia watkow za pomoca pthread_cancel
	oraz mechanizm "cancellation points". Zwroccie uwage na pare 
	pthread_cleanup_push oraz pthread_cleanup_pop otaczajacych wywolanie
	pthread_delay_np (cancellation point!) wewnatrz mutexa. Bez nich 
	dochodzi do bledu! Rowniez ustawienie asynchronicznego trybu reakcji na
	pthread_cancel prowadzi do bledu (jesli asynchroniczny cancel pojawi
	sie miedzy mutex_lock a cleanup_push). Zachecam do eksperymentow. 
        Wazne funkcje: pthread_cancel, pthread_cleanup_push, 
                       pthread_cleanup_pop, pthread_setcanceltype,
	               pthread_clenaup_setcancelstate.
  
  timeout.c
	Program ilustruje, w jaki sposob mozna oczekiwac na zajscie pewnych 
	warunkow z okreslonym limitem czasu.
	Wazne funkcje: pthread_timedwait, gettimeofday.

4. Uwagi:
  a) Sa bardzo istotne roznice w semantyce poszczegolnych funkcji pomiedzy 
     Unixem a Unixem :-) Roznice pojawiaja sie wszedzie: domyslne wartosci 
     opcji, rozne lub te same PIDy watkow tworzonych przez jeden proces, 
     sposob obslugi cancellation point. Nalezy zachowac duza ostroznosc!
  b) Programy nalezy kompilowac z opcjami -D_REENTRANT -lpthread
  c) Uwaga na funkcje cancel! Nie wszystkie funkcje, ktore zgodnie z manem 
     powinny zachowywac sie jak "cancellation points" faktycznie sa nimi
     (np. pthread_cond_wait). Uwaga ta dotyczy biblioteki dostepnej na 
     wydziale.  
  d) Makefile zostal napisany "po nowemu".  Zwroc uwage, ze kazda nazwa pliku
     wystepuje w Makefile tylko raz.  Mniejsze sa wiec mozliwosci popelnienia
     bledu.
  e) W katalogu publicznym w podkatalogu zadania znajduje sie tresc drugiego
     zadania zaliczeniowego. Termin oddania tego zadania uplywa na zajeciach
     nr 9.
  
