diff --git a/Concurrent Systems/notes/7- MUTEX-free concurrency.md b/Concurrent Systems/notes/7- MUTEX-free concurrency.md index 9f5d79e..15b7688 100644 --- a/Concurrent Systems/notes/7- MUTEX-free concurrency.md +++ b/Concurrent Systems/notes/7- MUTEX-free concurrency.md @@ -6,5 +6,14 @@ Critical sections (locks) have drawbacks: the liveness properties used so far cannot be used anymore, since they rely on CSs. (example: if we have only atomic R/W registers, these are the only atomic things that we have. But we may also have atomic primitives like *test&set*, *compare&swap* ecc.). -1. **Obstruction freedom:** +#### Liveness properties +We have four new liveness properties +1. **Obstruction freedom:** every time an operation is run in isolation (no overlap with any other operation on the same object), it terminates +2. **Non-blocking:** whenever an operation is invoked on an object, eventually one operation on that object terminates + - reminds deadlock-freedom in MUTEX-based concurrency +3. **Wait freedom:** whenever an operation is invoked on an object, it eventually terminates + - reminds starvation-freedom in MUTEX-based concurrency +4. **Bounded wait freedom:** W.F. plus a bound on the number of steps needed to terminate + - reminds bounded bypass in MUTEX-based concurrency +*REMARK:* these notions naturally cope with (crash) failures. Fail stop is another way of terminating, there is no way of distinguishing a failure from an arbitrary long sleep (because of asynchrony). \ No newline at end of file