A wait-free implementation of a concurrent data object is one that guarantees that any process can complete any operation in a finite number of steps of finite time, regardless of the execution speeds of the other processes.
Wait-free algorithms are always lock-free algorithms. Whenever one process locks an object, other objects are forced to wait an unbounded amount of time until the first process releases that object. This causes many well-known problems (indeterministic DeadLock and LiveLock) that are completely avoided by wait-free algorithms.
(stuff that was really merely lock-free, not quite wait-free, moved to LockFreeSynchronization)
Someone changed "DeadLock" to "indeterministic DeadLock". What's the difference ? -- DavidCary
Are there any ACID database with WaitFree? reads and reasonable updates ? The closest I can get is:
:read - open("cur"); read(); close("cur")
:write - lock("lock"); copy("cur", "tmp"); modify("tmp"); rename("tmp", "cur"); unlock("lock");
Reads are fine and virtually waitfree this way, but writes are not.
See LockFreeSynchronization SynchronizationStrategies http://en.wikipedia.org/wiki/Lock-free_and_wait-free_algorithms