--- title: SO Lista 10 tags: SO author: Mateusz Reis --- # SO LISTA 10 ## Zadanie 6 - przy wątkach nie możemy czekać na dowolony wątek ponieważ wątki nie są zależne od rodzica tzn. wątek przy zakończeniu nie wysyła sygnału do rodzica ## Zadanie 3 - **sytuacja wyścigu** - stan w którym więcej niż 2 wątki probują użyć tych samych danych, jednak z powodu algorytmu zmiany kontekstu możemy zmienić jeden wątek na drugi w dowolonym momencie co może powodować nieprzewidywalne skutki W naszej funkcji operacja inkrementacji tally składa się z trzech operacji - załadowania zmiennej do rejestru - dodanie 1 do wartości - zapisanie do rejestru W każdym momencie pomiędzy dwoma operacjami możemy zmienić wątek, dlatego przy dwóch procesach możemy otrzymać wyniki od 50 do 100 W przypadku otrzymania wartości mniejszej niż 100 mogła zajść następująca sytuacja: |nr operacji |Wątek 1|Wątek 2| |-|-|-| |1|load|-| |2|-|load| |3|add 1|-| |4|-|add 1| |5|store|-| |6|-|store| |...|...|...| Po tych operacjach zmienna `tally` będzie miała wartość 1 zamiast 2, a po 50 iteracjach w ten sposób otrzymamy 50 zamiast 100. Oczywiście operacje mogą przeplatać się dowolonie dlatego możliwe wyniki są z przedziału 50-100. W przypadku k wątków sytuacja wygląda analogicznie i możliwe wartości będą w przedziale od 50 do 50*k ## Zadanie 7 - **pętla zdarzeń** - pętla która czeka na zdarzenia i obsługuje je. Oprócz współbieżności znajduje zastosowania w grach, gdzie czekamy na wciścniecie przycisku przez gracza.