On Wed Jul 9, 2025 at 10:12 PM CEST, Boqun Feng wrote: > On Wed, Jul 09, 2025 at 08:22:16PM +0200, Benno Lossin wrote: >> On Wed Jul 9, 2025 at 12:34 PM CEST, Andreas Hindborg wrote: >> > "Benno Lossin" <lossin@xxxxxxxxxx> writes: >> >> On Tue Jul 8, 2025 at 10:54 AM CEST, Andreas Hindborg wrote: >> >>> "Boqun Feng" <boqun.feng@xxxxxxxxx> writes: >> >>>> On Mon, Jul 07, 2025 at 03:38:58PM +0200, Alice Ryhl wrote: >> >>>>> On Mon, Jul 7, 2025 at 3:32 PM Andreas Hindborg <a.hindborg@xxxxxxxxxx> wrote: >> >>>>> > >> >>>>> > Introduce the `SetOnce` type, a container that can only be written once. >> >>>>> > The container uses an internal atomic to synchronize writes to the internal >> >>>>> > value. >> >>>>> > >> >>>>> > Signed-off-by: Andreas Hindborg <a.hindborg@xxxxxxxxxx> >> >>>>> >> >>>>> LGTM: >> >>>>> Reviewed-by: Alice Ryhl <aliceryhl@xxxxxxxxxx> >> >>>>> >> >>>>> > +impl<T> Drop for SetOnce<T> { >> >>>>> > + fn drop(&mut self) { >> >>>>> > + if self.init.load(Acquire) == 2 { >> >>>>> > + // SAFETY: By the type invariants of `Self`, `self.init == 2` means that `self.value` >> >>>>> > + // contains a valid value. We have exclusive access, as we hold a `mut` reference to >> >>>>> > + // `self`. >> >>>>> > + unsafe { drop_in_place(self.value.get()) }; >> >>>>> >> >>>>> This load does not need to be Acquire. It can be a Relaxed load or >> >>>>> even an unsynchronized one since the access is exclusive. >> >>>> >> >>>> Right, I think we can do the similar as Revocable here: >> >>>> >> >>>> if *self.init.get_mut() == 2 { } >> > >> > Ok, now I got it. You are saying I don't need to use the atomic load >> > method, because I have mutable access. Sounds good. >> > >> > But I guess a relaxed load and access through a mutable reference should >> > result in the same code generation on most (all?) platforms? >> >> AFAIK it is not the same on arm. >> > > Right, when LTO=y, arm64 use acquire load to implement > READ_ONCE()/atomic_read(). But Andreas was talking about relaxed load vs mutable reference (= normal unsynchronized write)? --- Cheers, Benno