mirror of
https://github.com/golang/go
synced 2024-11-26 04:17:59 -07:00
sync: document RWMutex race semantics
RWMutex provides explicit acquire/release synchronization events to the race detector to model the mutex. It disables sync events within the methods to avoid e.g., the atomics from adding false synchronization events, which could cause false negatives in the race detector. Change-Id: I5126ce2efaab151811ac264864aab1fa025a4aaf Reviewed-on: https://go-review.googlesource.com/c/go/+/270865 Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Trust: Michael Pratt <mpratt@google.com>
This commit is contained in:
parent
b63db7f724
commit
b4f3d52f6a
@ -35,6 +35,19 @@ type RWMutex struct {
|
||||
|
||||
const rwmutexMaxReaders = 1 << 30
|
||||
|
||||
// Happens-before relationships are indicated to the race detector via:
|
||||
// - Unlock -> Lock: readerSem
|
||||
// - Unlock -> RLock: readerSem
|
||||
// - RUnlock -> Lock: writerSem
|
||||
//
|
||||
// The methods below temporarily disable handling of race synchronization
|
||||
// events in order to provide the more precise model above to the race
|
||||
// detector.
|
||||
//
|
||||
// For example, atomic.AddInt32 in RLock should not appear to provide
|
||||
// acquire-release semantics, which would incorrectly synchronize racing
|
||||
// readers, thus potentially missing races.
|
||||
|
||||
// RLock locks rw for reading.
|
||||
//
|
||||
// It should not be used for recursive read locking; a blocked Lock
|
||||
|
Loading…
Reference in New Issue
Block a user