---
# System prepended metadata

title: SO Lista 10
tags: [SO]

---

---
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. 

