1 // Copyright 2021 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 5 //go:build amd64 || arm64 || loong64 || mips64 || mips64le || ppc64 || ppc64le || riscv64 || s390x || wasm
6 7 package atomic
8 9 // LoadAcquire is a partially unsynchronized version
10 // of Load that relaxes ordering constraints. Other threads
11 // may observe operations that precede this operation to
12 // occur after it, but no operation that occurs after it
13 // on this thread can be observed to occur before it.
14 //
15 // WARNING: Use sparingly and with great care.
16 //
17 //go:nosplit
18 func (u *Uint64) LoadAcquire() uint64 {
19 return LoadAcq64(&u.value)
20 }
21 22 // StoreRelease is a partially unsynchronized version
23 // of Store that relaxes ordering constraints. Other threads
24 // may observe operations that occur after this operation to
25 // precede it, but no operation that precedes it
26 // on this thread can be observed to occur after it.
27 //
28 // WARNING: Use sparingly and with great care.
29 //
30 //go:nosplit
31 func (u *Uint64) StoreRelease(value uint64) {
32 StoreRel64(&u.value, value)
33 }
34