Skip to content

Atomic*::as_ptr unnecessarily restricts operations on the pointer to atomic operations #138246

@briansmith

Description

@briansmith
Contributor

Location

https://doc.rust-lang.org/std/sync/atomic/struct.AtomicUsize.html#method.as_ptr

[...] Any use of the returned raw pointer requires an unsafe block and still has to uphold the same restriction: operations on it must be atomic.

Summary

PR #136669 and PR #138000 make it clear that we should be able to safely do a non-atomic read of an atomic in certain circumstances. The most natural way to do the non-atomic read is to use as_ptr() and then do a read through the pointer.

However, the documentation for as_ptr() disallow any non-atomic operation on the pointer it returns, at odds with the aforementioned PRs. I believe the statement "operations on it must be atomic" should be replaced with a reference to the documentation in https://doc.rust-lang.org/std/sync/atomic/index.html#memory-model-for-atomic-accesses.

(NIT: I don't think "Any use of the returned raw pointer requires an unsafe block" is correct or particularly useful. That seems to be justifying the addition of the function, not helping people use it. Presumably pointer comparison or other operations can be done that don't require an unsafe block.)

/cc @RalfJung

Activity

added
A-docsArea: Documentation for any part of the project, including the compiler, standard library, and tools
on Mar 8, 2025
added
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Mar 8, 2025
added
T-opsemRelevant to the opsem team
A-atomicArea: Atomics, barriers, and sync primitives
on Mar 9, 2025
RalfJung

RalfJung commented on Mar 10, 2025

@RalfJung
Member

Yeah good point, the wording should be updated to reflect that non-atomic accesses are UB if they cause a data race -- the point is to clarify that this method does not somehow grant an exception to that rule.

If someone makes a PR for this, please tag me and I'll take a look. :)

changed the title [-]Atomic*::as_ptr unnecessarily restrictions operations on the pointer to atomic operations[/-] [+]Atomic*::as_ptr unnecessarily restricts operations on the pointer to atomic operations[/+] on Mar 10, 2025
added
E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.
on Apr 9, 2025
removed
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Apr 10, 2025
briansmith

briansmith commented on Jul 28, 2025

@briansmith
ContributorAuthor

Fixed by #144072. [Edit: and #144582]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-atomicArea: Atomics, barriers, and sync primitivesA-docsArea: Documentation for any part of the project, including the compiler, standard library, and toolsE-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.T-opsemRelevant to the opsem team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @briansmith@RalfJung@lolbinarycat@jieyouxu@rustbot

        Issue actions

          Atomic*::as_ptr unnecessarily restricts operations on the pointer to atomic operations · Issue #138246 · rust-lang/rust