-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Description
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
OnceNonZeroUsize::get_unchecked
. matklad/once_cell#274RalfJung commentedon Mar 10, 2025
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. :)
[-]Atomic*::as_ptr unnecessarily restrictions operations on the pointer to atomic operations[/-][+]Atomic*::as_ptr unnecessarily restricts operations on the pointer to atomic operations[/+]as_ptr
function of Atomic$Int to clarify circumstances of usage #139637briansmith commentedon Jul 28, 2025
Fixed by #144072. [Edit: and #144582]