---
# System prepended metadata

title: L6 - zarys teoretyczny (bez wyprowadzenia wzorów)

---

# L6 - zarys teoretyczny (bez wyprowadzenia wzorów)

---
ALT:
Nieczekanie - każdy operacja skończy się w skończonej liczbie kroków (gwarancja, że każdy wątek robi progres).

Niewstrzymywanie - pojedyncze wątki mogą głodować, ale system jako całość dokonuje progresu.

Te własności nazywane są nieblokującymi, ponieważ porażka lub wstrzymanie jednego porocesu nie spowoduje zablokowania innego procesu.


---

* **nieczekanie** (wait-freeness) - Każde wywołanie metody zakończy się w skończonej liczbie kroków całego systemu

* **niewstrzymywanie** (lock-freeness) - Jakieś wywołanie metody (dla jakiegoś wątku) zakończy się w skończonej liczbie kroków całego systemu.
Inaczej - cały system dokonuje postępu, ale jakiś konkretny wątek niekoniecznie

* **blokowanie** (blocking) - jeśli wstrzymanie jakiegoś wątku może zablokować inne wątki

nieczekanie i niewstrzymywanie są nieblokujące
niezakleszczenie i niezagłodzenie są blokujące, ponieważ dopuszczają taką możliwość

(ogólnie to niezakleszczenie (deadlock-freedom) i niezagłodzenie (starvation-freedom) dotyczą samego lock'a, a nieczekanie (wait-freeness) i niewstrzymywanie (lock-freeness) dotyczą wywołania metody)

(do tych zagadnień l6z1)

* rejestr jest **bezpieczny**, jeśli read() nienachodzący na write() zwraca ostatni write(), a read() nachodzący na write() zwraca dozwoloną wartość 
![](https://i.imgur.com/fFoMVzH.png)

![](https://i.imgur.com/DxlTV36.png)


* rejestr **regularny** jest bezpieczny i dodatkowo jak nachodzi read() i write() to zwraca jedną z 'k' ostatnich wartości
![](https://i.imgur.com/coNmzD7.png)
![](https://i.imgur.com/UUmqWys.png)

Atomowy - najlepszy:
![](https://i.imgur.com/9IaWzgn.png)


![](https://i.imgur.com/DMAc9ZM.png)
