---
# System prepended metadata

title: SyK 13

---

# SyK 13

# Zadanie 1
1 lub 2
Tak ma miejsce **sytuacja wyścigu**

# Zadanie 2
Min 50, max 100

# Zadanie 3
![](https://i.imgur.com/iESLGdA.png)

- Mutual Exclusion - spełniony
- Warunek progress - nie spełniony
Oba procesy ustawią:
flag[my_id] = true;
I w nieskończoność będą wykonywać:
while (flag[1 - my_id] == true);
(Oba procesy chcą wejść do sekcji krytycznej, a żaden do niej nie wejdzie)

- Bounded waiting - spełniony
Bo jeżeli drugi proces ma nie chce się wykonywać, to od razu  ten pierwszy rozpocznie się wykonywać.

# Zadanie 4
![](https://i.imgur.com/EUsAYK2.png)

1) Mutual exclusion
   Proces A wchodzi do sekcji krytycznej wtedy i tylko wtedy, gdy flaga procesu B jest ustawiona na false lub gdy zmienna turn zawiera jego identyfikator. Może dojść do sytuacji, w której obydwa procesy 
   będą miały ustawioną flagę, ale zmienna turn może przyjąć tylko jedną wartość, więć tylko jeden proces wejdzie do sekcji krytycznej.
   
2) Załóżmy, że proces A chce wejść do sekcji krytycznej (flag[A]==true), a proces B nie (flag[B]==false). Zmienna turn będzie wskazywać na proces B, ale skoro flag[B]==false, to proces A będzie mógł wejść do sekcji krytycznej.

3) Instrukcja flag[id] = false z sekcji `unlock` gwarantuje, że proces będzie czekał na wejście do sekcji krytycznej tylko do momentu, gdy drugi z procesów zakończy swoją sekcję krytyczną i wykona sekcję wyjściową.



# Zadanie 5


| A                                                       | B                                                     |
| ------------------------------------------------------- | ----------------------------------------------------- |
| turn = A                                                |                                                       |
| ...   (proces A śpi)                                    | turn = B                                              |
| ...   (proces A śpi)                                    | flag[1] = true                                        |
| ...   (proces A śpi)                                    | ? (flag[0] && ...) -> niespełnione, wejdzie do sekcji |
| flag[0] = true                                          |                                                       |
| ? (... && turn == A) -> niespełnione, wejdzie do sekcji |                                                       |
|                                                         |                                                       |

Więc warunek Mutual Exclusion nie będzie spełniony

Warunek progress spełniony, bo działa identycznie jak w zwykłym algorytmie - a tam jak zostało pokazane warunek jest spełniony.
Analogicznie dla bounded waiting.


# Zadanie 6

Nic nie działa


# Zadanie 7
Wszystko działa. Jeżeli proces rozpoczyna wykonywanie sekcji krytycznej to flaga true drugiego procesu ustawiona jest na true.
# Zadanie 8
![](https://i.imgur.com/dirsoQI.png)
Nie jest spełnione bounded waiting
Progress jest spełniony

# Zadanie 9
Uczciwość zapełniona przez tablicę waiting