# 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)