Advertisement
Guest User

7

a guest
Nov 20th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. 2.
  2.  
  3. W main tworzy sie nthreads watkow producentow, producent w swojej funkcji ma za zadanie
  4.  
  5. wpisywac do tablicy buff elementy takie same jak indeksy tablicy, wszystkie watki realizowane sa w petli
  6.  
  7. wiec rownolegle, przy malych ilosciach nitems 1 thread zdazy wpisac wsystkie wartosci do tablicy ale jesli
  8.  
  9. nitems bedzie odpowiednio duze 1 producent nie zdazy wpisac wszystkiego co spowoduje ze proces nastepny rowniez zacznie wpisywac
  10.  
  11. spowoduje to wpisywanie do miejsc w tablicy ktore juz byly zapisane ze starymi elementami.
  12.  
  13. 3.
  14.  
  15. Dodanie mutex w petli wpisywania produce spowoduje ze gdy pojawi sie nastepny watek, zatrzyma watek poprzedni i zacznie wpisywac dane do swojej tablicy
  16.  
  17. w ten sposob unikniete zostana bledy wpisywania, mozna zauwazyc ze watki otwieraja sie z rozna predkoscia poniewac kazdy watek wpisuje inna ilosc wartosci
  18.  
  19. 4.
  20.  
  21. Program prodcons3 przy kazdym pomiarze wykonywal sie kilka razy dluzej. Spowodowane jest to tym ze w odroznieniu od prodcons2, posiada on funkje consume_wait(int i), która w pętli funkcji consume wywoluje sie przed kazdym sprawdzzeniem czy wpisana wartosc do tablicy buff jest odpowiednia. Funkcja consume_wait jest swego rodzaju zabezpieczeniem ktore blokuje mutex i sprawdza czy watek produce wpisal juz 'i' lub wiecej elementow do tablicy buff.
  22.  
  23. 5.
  24.  
  25. Prodcons4 od prodcons3 rozni sie jedynie funkcja sched_yield ktora znajduje sie w funkcji consume_wait. Na podstawie pomiarow widac mala roznice w czasie wykonania na korzysc prodcons4. Zaglebiajac sie w dokumentacje mozna odnalezc ze funkcja sched_yield odpowiada za to ze watek ktory ja wywoluje, zwalnia swoje miejsce w procesorze i przesuwa sie na koniec kolejki a nastepny watek rozpoczyna swoje dzialanie. Dzięki tej funkcji nastepny watek zaczyna wpisywac do tablicy wartosci zanim funkcja consume_wait, ponownie zablokuje mutex.
  26.  
  27. 6.
  28.  
  29. Wykorzystanie zmiennej warunkowej w programie prodcons5 pozwolilo na wyeliminowanie fukncji consume_wait. Analizujac program nie moglem znalezc korzysci na rzecz zmiennej warunkowej a consume_wait w prodcons3.
  30.  
  31. Konsument sprawdza tablice buff dopiero po odblokowaniu mutexu i sprawdzeniu czy liczba gotowych elementow jest wieksza od 0.
  32.  
  33. 7.
  34.  
  35. Prodcons6 wykorzystuje 2 mutexy. Jeden odpowiedzialny za wpisywanie do tablicy "put" a drugi odpowiedzialny za sprawdzanie gotowosci elementow "nready", dzieki temu rozwiazaniu program w przeciwienstwie o poprzedniego nie blokuje mutexu wpisujacego podczas sprawdzania przez konsumenta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement