Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove SeqCst usage from Arc #96411

Closed
wants to merge 1 commit into from
Closed

Remove SeqCst usage from Arc #96411

wants to merge 1 commit into from

Conversation

ghost
Copy link

@ghost ghost commented Apr 25, 2022

Prior to this commit, there were multiple loads from the weak and strong
counts that used SeqCst ordering. For plain loads, SeqCst behaves like
Acquire with the additional guarantee that all sequentially consistent
operations are observed in the same order by all threads.

However, this additional guarantee does not apply here because we never do
any store or load-with-store operations that use SeqCst ordering on either
of these counts.

This commit relaxes the ordering to Acquire to better reflect the
requirements and guarantees of this code to the reader, compiler, and
hardware.

Prior to this commit, there were multiple loads from the weak and strong
counts that used SeqCst ordering. For plain loads, SeqCst behaves like
Acquire with the additional guarantee that all *sequentially consistent*
operations are observed in the same order by all threads.

However, this additional guarantee does not apply here because we never do
any store or load-with-store operations that use SeqCst ordering on either
of these counts.

This commit relaxes the ordering to Acquire to better reflect the
requirements and guarantees of this code to the reader, compiler, and
hardware.
@rustbot rustbot added the T-libs Relevant to the library team, which will review and decide on the PR/issue. label Apr 25, 2022
@rust-highfive
Copy link
Collaborator

Hey! It looks like you've submitted a new PR for the library teams!

If this PR contains changes to any rust-lang/rust public library APIs then please comment with r? rust-lang/libs-api @rustbot label +T-libs-api -T-libs to request review from a libs-api team reviewer. If you're unsure where your change falls no worries, just leave it as is and the reviewer will take a look and make a decision to forward on if necessary.

Examples of T-libs-api changes:

  • Stabilizing library features
  • Introducing insta-stable changes such as new implementations of existing stable traits on existing stable types
  • Introducing new or changing existing unstable library APIs (excluding permanently unstable features / features without a tracking issue)
  • Changing public documentation in ways that create new stability guarantees
  • Changing observable runtime behavior of library APIs

@rust-highfive
Copy link
Collaborator

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @m-ou-se (or someone else) soon.

Please see the contribution instructions for more information.

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Apr 25, 2022
@ghost
Copy link
Author

ghost commented Apr 25, 2022

Note that C++ allows implementations to use relaxed ordering for std::shared_ptr::use_count (source). We could do that as well, but that has a much higher risk of breakage if someone is relying on the acquire ordering here somehow.

@taiki-e
Copy link
Member

taiki-e commented Apr 25, 2022

I think this is duplicate of #95183.

@ghost
Copy link
Author

ghost commented Apr 25, 2022

Ah, yep it is! Apologies, I did a quick search for SeqCst and didn't find that.

@ghost ghost closed this Apr 25, 2022
@ghost ghost deleted the misleading_arc_seqcst branch May 2, 2022 14:35
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants