Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 2.
- W main tworzy sie nthreads watkow producentow, producent w swojej funkcji ma za zadanie
- wpisywac do tablicy buff elementy takie same jak indeksy tablicy, wszystkie watki realizowane sa w petli
- wiec rownolegle, przy malych ilosciach nitems 1 thread zdazy wpisac wsystkie wartosci do tablicy ale jesli
- nitems bedzie odpowiednio duze 1 producent nie zdazy wpisac wszystkiego co spowoduje ze proces nastepny rowniez zacznie wpisywac
- spowoduje to wpisywanie do miejsc w tablicy ktore juz byly zapisane ze starymi elementami.
- 3.
- Dodanie mutex w petli wpisywania produce spowoduje ze gdy pojawi sie nastepny watek, zatrzyma watek poprzedni i zacznie wpisywac dane do swojej tablicy
- w ten sposob unikniete zostana bledy wpisywania, mozna zauwazyc ze watki otwieraja sie z rozna predkoscia poniewac kazdy watek wpisuje inna ilosc wartosci
- 4.
- 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.
- 5.
- 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.
- 6.
- 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.
- Konsument sprawdza tablice buff dopiero po odblokowaniu mutexu i sprawdzeniu czy liczba gotowych elementow jest wieksza od 0.
- 7.
- 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