Merged
Conversation
This PR moves us from `Mutex` to `Atomic` for scalar integer values that don't need a full mutex guarding them. On Darwin, we cannot use types from the `Synchronization` module because we need to back-deploy earlier than they are available, so we simulate a subset of the `Atomic` API using a mutex. This is not a performance regression on Darwin since we're already using a mutex there anyway. For this initial PR, I have not attempted to use any atomic orderings other than `.sequentiallyConsistent`. We can revise later on a case-by-case basis.
jerryjrchen
approved these changes
Mar 2, 2026
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.
This PR moves us from
MutextoAtomicfor scalar integer values that don't need a full mutex guarding them.On Darwin, we cannot use types from the
Synchronizationmodule because we need to back-deploy earlier than they are available, so we simulate a subset of theAtomicAPI using C atomic intrinsics provided by clang and bubbled up through Stubs.h. Unlike the realAtomictype, we heap-allocate our storage, but we're heap-allocating the current mutex so that isn't a performance regression.I have only implemented the set of functionality we're actually using; adding more functionality isn't hard, but is beyond the scope of this PR. In particular, I have not attempted to implement/use any atomic orderings other than
.sequentiallyConsistent. We can revise orderings later on a case-by-case basis.Checklist: