# 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ść


* rejestr **regularny** jest bezpieczny i dodatkowo jak nachodzi read() i write() to zwraca jedną z 'k' ostatnich wartości


Atomowy - najlepszy:

