# Ćwiczenia 14, grupa cz. 14-16, 23. czerwca 2022
###### tags: `SYK21` `ćwiczenia` `pwit`
## Deklaracje
Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Jeśli pożądasz zreferować dane zadanie (co najwyżej jedno!) w trakcie dyskusji oznacz je znakiem ==X== na żółtym tle.
**UWAGA: Tabelkę wolno edytować tylko wtedy, gdy jest na zielonym tle!**
:::danger
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| ----------------------:| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
Kamil Banaś | | | | | | | | | | | |
Mateusz Burdyna | | | | | | | | | | | |
Dariusz Ciesielski | | | | | | | | | | | |
Dawid Dudek | | | | | | | | | | | |
Mikołaj Dworszczak | | | | | | | | | | | |
Przemysław Grochal | | | | | | | | | | | |
Adam Jarząbek | | | | X | | X | X | X | X | X | |
Anna Karykowska | | | | | | | | | | | |
Oleś Kulczewicz | | | | | | | | | | | |
Pola Marciniak | | | | | | | | | | | |
Mikołaj Mroziuk | | | | | | | | | | | |
Marcelina Oset | | X | | | | | | | | | |
Natalia Piasta | | | | | | | | | | | |
Krzysztof Piekarczyk | | | | | | | | | | | |
Marcin Płaza | | | | | | | | | | | |
Paweł Richert | | | | | | | | | | | |
Rafał Starypan | | | | | | | | | | | |
Dawid Strojek | | X | | | | | | | | | |
Mateusz Suszek | | | | | | | | | | | |
Wojciech Śniady | | X | | | | | | | | | |
Volha Tsekalo | ==x== | | | | | | | | | | |
Yana Vashkevich | X | X | | ==X== | | | | | | | |
Konrad Woźniak | | | | | | | | | | | |
Natalia Czerep | | | | | | | | | | | |
Joanna Stachowicz | X | X | X | X | | ==X== | X | X | X | | |
:::
Tu można do-deklarować zadanie 9 z listy 13.:
-
-
:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::
## Zadanie 1
:::success
Autor: Volha Tsekalo
:::



Funkcja increment(&zmienna) przy użyciu compare_and_swap zachowuje następującą własność:
$k$ inkrementacji spowoduje zwiększenie licznika (zmiennej) o $k$.
Jeżeli liczba $k$ jest znana i jest niewielka, to funckja increment jest dobra.
W przypadku gdy k jest duże lub nie jest znana jego wartość, jakiś proces nr. 1 może zostać poszkodowany w przypadku, gdy inny proces zmienił wartość zmiennej. Wtedy increment pierwszego procesu bedzie się pętlił, a proces zostanie zagłodzony.
W punkcie b) inkrementujemy ustalony $n$, więc można skorzystać z $increment$.
W punkcie a) wartość $k$ jest nieznana, nie należy używać $increment$.
🐇
## Zadanie 2
:::success
Autor: Wojciech Śniady
:::


```c=
//v - wspóldzielony liczny
bool lock = false //współdzielona zmienna
void increment(atomic_int* lock)
{
while (test_and_set(&lock)) ;
*v++;
lock = false;
}
```
🦫
## Zadanie 3
:::success
Autor: Joanna Stachowicz
:::

```c=
int compare_and_swap(int *val, int expected, int new_val) {
int temp = *val;
if (*val == expected)
*val = new_val;
return temp;
}
```

[Implementacja semafora zliczającego przy pomocy mutexów](http://www.cs.umd.edu/~shankar/412-Notes/10x-countingSemUsingBinarySem.pdf)
## Zadanie 4
:::success
Autor: Yana Vashkevich
:::



## Zadanie 5
:::danger
Autor:
:::
## Zadanie 6
:::success
Autor: Joanna Stachowicz
:::





## Zadanie 7
:::success
Autor: Adam Jarząbek
:::


## Zadanie 8
:::success
Autor: Joanna Stachowicz
:::

```
Problem czytelników i pisarzy bez głodzenia pisarzy:
1. dodajemy bramki dla czytelników i pisarzy, umożliwiając pisarzom zablokowanie ich:
kiedy pisarz przejdzie przez bramki, gdy w pokoju są czytelnicy, bramki zostaną zablokowane
2. pisarz będzie mógł przejść przez bramkę pod warunkiem, że pokój będzie pusty
(ostatni wychodzący czytelnik wywołuje procedurę "signal" na roomEmpty, odblokowując oczekującego pisarza)
3. jeżeli pisarz "utknie" wewnątrz bramek, czytelnicy będą ustawiali się "przed" bramkami w kolejce
Takie rozwiązanie gwarantuje, że w momencie opuszczenia sekcji krytycznej przez ostatniego czytelnika,
przynajmniej jeden pisarz wejdzie do niej jako następny (ten, który "utknął" między bramkami, a sekcją krytyczną),
co również rozwiązuje problem głodzenia pisarzy (nie odbywa się to także kosztem czytelnika).
```
## Zadanie 9
:::success
Autor: Adam Jarząbek
:::

## Zadanie 10
:::success
Autor: Adam Jarząbek
:::

## Zadanie 11
:::danger
Autor:
:::