Implement a fairer locking strategy for a new mutex type #130
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements a locking strategy for the
SpinMutex
type that uses eventual fairness, inspired by the one used in theasync-lock
crate. If a lock operation spins for a long period of time, it becomes a "starving" operation. When the mutex is eventually unlocked, starving locks are given precedence over non-starving locks. This is similar to less strict version ofTicketMutex
, in that it reduces contention in the worst cases.The only real downside of this strategy is that is uses an
AtomicUsize
instead of anAtomicBool
to keep track of the number of starving operations in addition to the lock status.