]> Cypherpunks.ru repositories - gostls13.git/commit
sync/atomic: add (*Value).Swap and (*Value).CompareAndSwap
authorColin Arnott <colin@urandom.co.uk>
Thu, 9 Jul 2020 07:06:46 +0000 (07:06 +0000)
committerKeith Randall <khr@golang.org>
Tue, 4 May 2021 00:15:27 +0000 (00:15 +0000)
commit2422c5eae5dc6539b4b7657ef7bfe58a65acb61d
tree07113bce1f36d5d684ebcc6a5df4db3296dffb8c
parent496d7c691481966fd6ea806205aa025698a172af
sync/atomic: add (*Value).Swap and (*Value).CompareAndSwap

The functions SwapPointer and CompareAndSwapPointer can be used to
interact with unsafe.Pointer, however generally it is prefered to work
with Value, due to its safer interface. As such, they have been added
along with glue logic to maintain invariants Value guarantees.

To meet these guarantees, the current implementation duplicates much of
the Store function. Some of this is due to inexperience with concurrency
and desire for correctness, but the lack of generic programming
functionality does not help.

Fixes #39351

Change-Id: I1aa394b1e70944736ac1e19de49fe861e1e46fba
Reviewed-on: https://go-review.googlesource.com/c/go/+/241678
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/sync/atomic/value.go
src/sync/atomic/value_test.go