# 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