Zakres laboratorium:

 

Zadanie 1

Utworzyć program, który posłuży do zapoznania się z funkcjonowaniem wątków w systemie linux.

  • utworzyć prosty program w języku C typu “Hello World\r\n”, napis powinien być wyświetlany na samym początku programu głównego
  • dodać do programu 4 wątki – tworzenie wątków z wykorzystaniem funkcji “pthread_create“,  do opóźnień wykorzystać funkcję “sleep”,
  • wątki powinny wyświetlić na ekranie swój numer, każdy powinien wyświetlić numer 5 razy i zakończyć działanie,
  • program główny oczekuje “pthread_join”  na zakończenie pracy wszystkich wątków i wyświetla napis “koniec”, kończy działanie,
  • jak działa program bez oczekiwania na zakończenie wątków? kiedy jest zakończony? Czy wątki dalej pracują?

przy kompilacji programu należy dodać flagę “-lpthread “

Zadanie 2

Zapoznanie się z działaniem mutexów

  • czym jest mutex?
  • utworzyć program z dwoma wątkami, opóźnienia w wątkach ustawić na 1 sekundę,
  • utworzyć dwie zmienne globalne typu liczbowego- int a,b,
  • wątek pierwszy:
    • ustawia zmienne a i b na wartość 1, pomiędzy ustawieniem oczekuje 1 sekundę
    • pobiera wartości zmiennych a,b do swoich lokalnych zmiennych x,y
    • wyświetla napis “Watek 1: a=%d b=%d”, gdzie %d to wartości zmiennych
    • czeka jedną sekundę
  • wątek drugi wykonuje analogiczne operacje jak wątek pierwszy tylko ustawia zmienne na 2,
  • zaobserwować działanie programu, czy zawsze wyświetlana zmienne a,b mają tą samą wartość? Dlaczego nie? jak rozwiązać problem?

 

Zadanie 3

Synchronizacja z wykorzystaniem mutexów – sekcja krytyczna:

  • zmodyfikować program z zadania 2 tak aby zmienne a,b zawsze miały tą samą wartość, wykorzystać mutex,
  • utworzyć mutex przy użyciu funkcji “pthread_mutex_init”,
  • dodać blokowanie i odblokowywanie do funkcji wątków tak aby powodowały wykluczenie jednoczesnej zmiany zmiennych przez dwa wątki.
Zadanie 4

Obsługa procesów:

  • utworzyć nowy program “Hello World 1\r\n”, który co 1 sekundę wyświetla na ekranie napis i będzie działał przez 60 sekund,
  • uruchomić program, w drugim oknie terminala sprawdzić PID procesu przy wykorzystaniu polecenia “ps” z odpowiednimi parametrami, co to jest PID procesu, do czego może służyć?
Zadanie 5
  • utworzyć drugi program “Hello World 2 – mój PID:%d\r\n”, działający tak jak pierwszy i wyświetla swój PID. Uruchomić dwa programy w jednym oknie terminala, programy pracują w tle, skorzystać z operatora “&”, jak wygląda okno terminala
  • w drugim oknie sprawdzić PID procesów, czy pokrywa się z wyświetlanym przez program?
  • wykorzystać polecenie “kill” i wyłączyć procesy przed ich zakończeniem, jak działa to polecenie, jakie argumenty może przyjąć?