################################################################################
  Kodowanie Windows-1250, koniec wiersza CR+LF, test: Za gl ja
  Threads - Biblioteka do wielowtkowoci i synchronizacji
  Copyleft (C) 2007 Adam Sawicki
  Licencja: GNU LGPL
  Kontakt: mailto:sawickiap@poczta.onet.pl , http://regedit.gamedev.pl/
################################################################################


Oglne
================================================================================

- Obiektowy

- Przenony
> W Windows uywa WinAPI
> W Linux uywa pthreads i jego rozszerze

- W razie bdw rzuca wyjtki moduu Error
Ale wiele funkcji dziaajcych na ju utworzonych obiektach (Lock, Wait itp.)
dla optymalizacji wydajnoci nie sprawdza bdw.

- Wzorowany na:
> Na ksice "Modern Multithreading" (Carver, Tai, wyd. Wiley)
> Klasa Thread - na jzyku Java
> Implementacja Cond w Windows - na bibliotece wxWidgets
  http://www.wxwidgets.org/
> Implementacja Barrier w Windows - na wykadach dr in. Tomasza Olasa
  http://icis.pcz.pl/~olas/

- Korzysta z wzorca Pimpl. Dziki temu nie wystawia do nagwka adnych
zalenoci #include.

- Wydajno: Nie jest maksymalna (gwnie przez ten Pimpl), ale nie powinna by
za.


Skadniki
================================================================================

- Thread - klasa wtku

Obiekty synchronizujce:

- Mutex - muteks
  - Klasa pomocnicza MutexLock i makro MUTEX_LOCK
- Semaphore - semafor zliczajcy
- Cond - zmienna warunkowa
- Barrier - bariera
- Event - zdarzenie (auto-reset lub manual-reset)

Szczegy znaczenia i uycia kadego z nich powinny wyjani komentarze w
Threads.hpp.


Implementacja
================================================================================

           |   Windows                            Linux
-----------+--------------------------------------------------------------------
Mutex      |   CRITICAL_SECTION lub Mutex         pthread_mutex_t
Semaphore  |   Semaphore                          sem_t
Cond       |   (emulowany)                        pthread_cond_t
Barrier    |   (emulowany)                        pthread_barrier_t
Event      |   Event                              (emulowany)


Czego nie ma
================================================================================

- Thread: wtkw Detached - wszystkie s Joinable.
Dlaczego? Poniewa nie chciao mi si tego pisa. Poza tym nie jest a tak
potrzebne.

- Thread: mechanizmu cancelacji
Dlaczego? Bo szczegy s zalene od danego problemu, zwykle to jest
niepotrzebne i nie ma sensu zabiera czasu i pamici na dodatkowe zasoby dla
kadego wtku. Kto chce mie cancelacj, moe sobie atwo wstawi do klasy
swojego wtku Event.

- Semafora binarnego
Dlaczego? Bo nie ma go natywnie ani w WinAPI ani w pthreads. Poza tym nie jest
a tak potrzebny, no i nie chce mi si myle jak go zrobi.

- RW Lock
Dlaczego? Bo to ju bardziej zaawansowana sprawa, a ponadto zalena od
konkregnego zastosowania. Nie zagbiaem si w to jeszcze dokadnie.

- Event: PulseEvent
Dlaczego? Bo nie jest to a takie potrzebne - jest dziwne, a poza tym nie bardzo
wiem jak to zasymulowa w Event w Linuksie.

- Czekania z okrelon zamiast niezdefiniowanej kolejnoci wznawiania wtkw.

- Zmienne warunkowe: Innych Signaling Disciplines ni Signal-and-Continue: np.
Signal-and-Urgent-Wait, Signal-and-Exit, Urgent-Signal-and-Continue (wg ksiki
"Modern Multithreading", Carver, Tai, wyd. Wiley, str. 199).

