W niektórych przypadkach gdy nasze programy przetwarzają duże ilości danych sekwencyjnie warto jest zastosować dodatkowe zabiegi zwiększające szybkość działania algorytmu przetwarzania. W pewnych miejscach gdzie funkcje mogą być duplikowane warto zastosować przetwarzanie równoległe. Jednym z mechanizmów przetwarzania równoległego są wątki - POSIX Threads/pthreads. Jest to o wiele korzystniejszy sposób zwielokrotnienia równoległego wykonywania funkcji od wzbudzania w systemie nowego procesu (fork) ponieważ wykorzystuje znacznie mniej zasobów systemowych do pracy - program ładowany jest raz do pamięci i wykonywany równolegle w tylko konkretnych obszarach. Jak więc zastosować wątki? To proste...
Stworzymy teraz warunek (IF), który sprawdzi, czy wątek został utworzony, jednocześnie inicjując wątek. Wykorzystujemy zmienne w1 i w2, watek1, watek2 oraz funkcje pthread_create.
if (w1=pthread_create( &watek1, NULL, &funkcjaC, NULL))
{
printf("Nie udalo sie utworzyc watku: %d\n", w1);
}
W ten sposób utworzymy pierwszy wątek, bądź uzyskamy kod błędu w przypadku niepowodzenia tej operacji. Warto jest zauważyć, że wykorzystujemy mechanizm przekazania adresu do funkcji i zmiennej wątku, a nie same zmienne oraz nazwę funkcji.
W większości przypadków warto jest zsynchronizować wątki w głównej mierze po to, aby w przypadku gdy jeden wątek się zakończy a drugi jeszcze ciągle jest w toku program nie przeszedł do dalszego wykonywania instrukcji. W tym celu wykorzystujemy funkcję pthread_join().
Funkcja pthread_join przyjmuje jako 1 parametr nazwę zmiennej (nie jej wskaźnik), zatem synchronizacja wątków będzie wyglądała następująco:
pthread_join( watek1, NULL );
pthread_join( watek2, NULL );
Po wykonaniu kroku 7 wątki ulegną synchronizacji (w określonej kolejności - najpierw wątek1, następnie wątek2). Po wykonaniu tych instrukcji program przejdzie do dalszego wykonywania programu. W celach testowych warto jest zastosować tutaj wyjście z programu w formie funkcji systemowej exit() zwracając 0 jako kod błędu - program wykonany prawidłowo.
Zapisujemy plik, sprawdzamy czy nie popełniliśmy jakichś literówek, dopisujemy wnętrze funkcji "funkcjaC" i możemy przystąpić do...
Możemy teraz przetestować program wykonując go. Jeśli nie będziemy mieli praw do wykonania programu używamy jako superużytkownik polecenia chmod +x na programie. Gdy posiadamy prawa do programu wpisujemy w shellu (np. bash):
./main
Program powinien się wykonać lub wskazać błąd - np. jeśli brak jest zasobów systemowych do wykonania wątku.
Wykonując program wielowątkowy warto jest przemyśleć możliwość wykorzystania mechanizmów zastrzegania dostępu do zasobów systemowych poprzez tzw. mutex (mutual exclusion - wzajemne wykluczenie).
ścieżka dostępu: Strona główna › Komputery i Internet › Programowanie › Jak dodać wątki do aplikacji (pthreads)?
Właściciel i czołowy programista firmy Bluebox Software. Grafik samouk i uż…
kategoria: Programowanie, system Linux
Jak sprawnie zaktualizować Gentoo?
Wasza ocena:Jak napisać użyteczną aplikację?
Wasza ocena: