---
# System prepended metadata

title: 'Ćwiczenia 14, grupa cz. 14-16, 15 czerwca 2023'
tags: [pwit, ćwiczenia, SYK23]

---

# Ćwiczenia 14, grupa cz. 14-16, 15 czerwca 2023

###### tags: `SYK23` `ć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  |
| ----------------------:| ----- | ----- |:----- | ----- | ----- | ----- |:-----:| ----- | --- | --- | --- |
|       Mikołaj Balwicki |       |       |       |       |       |       |       |       |     |     |     |
|       Wojciech Bogucki |       |   X   |       |       |       |       |       |       |     |     |     |
|     Mateusz Cerulewicz |       |       |       |       |       |       |       |       |     |     |     |
|    Mateusz Garncarczyk |       |       |       |       |       |       |       |       |     |     |     |
|         Mateusz Golisz |       |       |       |       |       |       |       |       |     |     |     |
|         Mateusz Kitzol |       |       |       |       |       |       |       |       |     |     |     |
|        Piotr Mańkowski |       |       |       |       |       |       |       |       |     |     |     |
|      Aleksandra Nicpoń |       |       |       |       |       |       |       |       |     |     |     |
|           Ksawery Plis |       |       |       |       |       |       |       |       |     |     |     |
|           Patryk Rybak |    ==X==   |       |       |       |       |       |       |       |     |     |     |
|            Rafał Spyra |       |       |       |    X   |       |       |   X    |    X   |     |     |
|    Dominik Szczepaniak |  X     |  X     |    ==X==   |    X   |  X     |   X    |   X    |   X    |  X   |  X   | X     |
|         Taras Tsehenko |       |       |       |       |       |       |       |       |     |     |     |
| Maksymilian Wiśniewski |       |       |       |       |       |       |       |       |     |     |     |
|      Martyna Wybraniec |       |       |       |       |       |       |       |       |     |     |     |
|      Natalia Zychowicz |  X    |   X   |   X   |     X |  ==X==|     X |  X    |     X |   X |  X  |  X  |
|          Patryk Maciąg |       |       |       |       |       |       |       |       |     |     |     |
|        Michał Mękarski |       |       |       |       |       |       |       |       |     |     |     |
:::



:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::



## Zadanie 1
:::success
Autor:	Patryk Rybak	
:::

![](https://hackmd.io/_uploads/BJ_wWKdv3.png)
![](https://hackmd.io/_uploads/SkMuZKOvn.png)
![](https://hackmd.io/_uploads/HyQt-FOvn.png)

a) W kodzie nie ma zabezpieczenia przed zmianami licznika przez więcej niż jeden proces w tym samym czasie oraz procesu mogą wykonywać increment() nieokreśloną liczbę razy. Z tego powodu może nastapić głodzenie procesu.

Po wykonaniu linijki TEMP = *V; i przed sprawdzeniem warunku pętli while przez jeden proces, pozostałe mogą za każdym razem modyfikować atomic_int w skutek czego blokowany proces nigdy nie wyjdzie z pętli.
Wykorzystanie nie jest poprawne. 

b) Procesy wykonują określoną liczbę increment(), więc nawet jeżeli jakiś proces był odwlekany w czasie to i tak w końcu zostanie dopuszczony.
Wykorzystanie jest poprawne.

## Zadanie 2
:::success
Autor:	Wojciech Bogucki	
:::
```c=
void incrementCounter()
{
    while(test_and_set(flag)) ;
    counter = counter + 1;
    flag = false;
}
```

```c=
void incrementCounter()
{
    do{
        int currentValue = counter;
        int newValue = currentValue + 1;
    }while(compare_and_swap(counter, currentValue, newValue) != currentValue)
}
```
## Zadanie 3
:::success
Autor:	Dominik Szczepaniak	
:::
mutex:
```c 
flag = false;
void lock(){
    while(test_and_set(flag));
}
void unlock(){
    flag = false;
}
```
semafora:
```c 
int value;
a = mutex(value>0)
b = mutex(true)

void wait()
{
    a.lock();
    b.lock();
    value--;
    if (value > 0){
        a.unlock();
    }
    b.unlock();
}

void signal()
{
    b.lock();
    value++;
    if (value == 1){
        a.unlock();
    }
    b.unlock();
        
}
```

## Zadanie 4
:::success
Autor:	Rafał Spyra	
:::
![](https://i.imgur.com/bTDmYmL.png)
![](https://i.imgur.com/R3k6qks.png)

## Zadanie 5
:::success
Autor:	Natalia Zychowicz	
:::
![](https://hackmd.io/_uploads/SkO1gGDvh.png)
![](https://hackmd.io/_uploads/SySgefwD2.png)
![](https://hackmd.io/_uploads/HkUTnD_Ph.png)
![](https://hackmd.io/_uploads/ryUmmzvDh.png)
![](https://hackmd.io/_uploads/HJN4XfvPh.png)

## Zadanie 6
:::success
Autor:	Dominik Szczepaniak	
:::
![](https://hackmd.io/_uploads/HyaSjK_D2.png)
![](https://hackmd.io/_uploads/ryoXsYuwn.png)

## Zadanie 7
:::success
Autor:	Rafał Spyra	
:::
```
int readcount, writecount;                   =0
semaphore rmutex, wmutex, readTry, resource; =1

//READER
reader() {
<ENTRY Section>
  readTry.P();                 
  rmutex.P();                  
  readcount++;                 
  if (readcount == 1)          
    resource.P();              
  rmutex.V();                  
  readTry.V();                 

<CRITICAL Section>
//reading is performed

<EXIT Section>
  rmutex.P();                  
  readcount--;                 
  if (readcount == 0)          
    resource.V();              
  rmutex.V();                  
}

//WRITER
writer() {
<ENTRY Section>
  wmutex.P();                  
  writecount++;                
  if (writecount == 1)         
    readTry.P();               
  wmutex.V();                  
  resource.P();                
<CRITICAL Section>
  //writing is performed
  resource.V();                

<EXIT Section>
  wmutex.P();                  
  writecount--;                
  if (writecount == 0)         
    readTry.V();               
  wmutex.V();                  
}
```

## Zadanie 8
:::success
Autor:	Rafał Spyra	
:::
Ten sam kod co powyżej

## Zadanie 9
:::success
Autor:	Natalia Zychowicz	
:::

![](https://hackmd.io/_uploads/Skbn_zDwn.png)
![](https://hackmd.io/_uploads/B1Es_zvD3.png)


## Zadanie 10
:::success
Autor:	Dominik Szczepaniak	
:::
![](https://hackmd.io/_uploads/SkRRl5Own.png)
![](https://hackmd.io/_uploads/H1QqQtuw3.png)

## Zadanie 11
:::success
Autor:	Natalia Zychowicz
:::
![](https://hackmd.io/_uploads/HyByuGPv3.png)
