Spinlock improvements and TaskId#127
Merged
accelerated merged 1 commit intobloomberg:masterfrom May 20, 2020
Merged
Conversation
2014239 to
f2e1f4d
Compare
39f7744 to
64f617c
Compare
* Fixed inefficient Spinlock implementation * Added TaskId and local::taskId() * Updated Mutex class to be owner aware * Refactored internal 'ISyncPtr' API calls to reduce code duplication * Fixed accidental unlocking of the ReadWriteSpinlock * Added spinlock traits and utils * Added ReadWriteLock and tests for TaskId. Signed-off-by: Alexander Damian <adamian@bloomberg.net>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Describe your changes
TaskIdto coroutines and IO tasks. This can be obtained at runtime vialocal::context::taskId()which is similar in nature tostd::this_thread::get_id().ReadWriteSpinlockif not unlocked.Mutexclass owner-aware. Only owning thread or coroutine can unlock.SpinLockandReadWriteSpinLockand added CPU pause instructions between spins. Support backoff after a certain number of spins with yield and sleep to release CPU. This makes the spinlock classes a lot more efficient. Fixes Inefficient SpinLock implementation #123.SpinLockTraitsclass.ISyncPtrto reduce code duplication. These APIs now call theISyncPtroverload withnullptras argument.ReadWriteMutexclass.Mutex::Guardto useTryToLocktag instead of a boolean. Also addedAdoptLocktag overload.MutexandReadWriteMutexare protected against locking inside a coroutine w/o a synchronization context.