Refactor LifoSem to use new bit field atomics API #2550
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.
Summary:
LifoSem is an existing synchronization data structure that bit-packs several logical data fields into a single atomic variable. This is a great example to convert over to use the new bit field atomic APIs because it shows the capabilities of the new APIs to minimize fragile boilerplate and maintenance complexity, and to make intention more clear from the code itself.
This data structure uses one performance optimization hack that I was not able to replicate with the bit field atomic abstractions while preserving original performance. So in this case (
Ugly-but-optimized) I preserve the hack by dipping into the underlying atomic (with some guardrails against breaking changes elsewhere).Note that this structure does use seq_cst memory order implicitly in some places that surely could be acq_rel, but I'm leaving that alone in this change.
Differential Revision: D88903968