aboutsummaryrefslogtreecommitdiff
path: root/var.go
diff options
context:
space:
mode:
authorMatt Joiner <anacrolix@gmail.com>2019-11-04 15:52:42 +1100
committerMatt Joiner <anacrolix@gmail.com>2019-11-04 15:52:42 +1100
commitbbcb2aadd77d362849993806e5c3900b11a1502e (patch)
tree0c3969c1cb031acdf1a23975b850934d130da87d /var.go
parentUse atomic pointers for Var data (diff)
downloadstm-bbcb2aadd77d362849993806e5c3900b11a1502e.tar.gz
stm-bbcb2aadd77d362849993806e5c3900b11a1502e.tar.xz
Remove global lock
Diffstat (limited to 'var.go')
-rw-r--r--var.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/var.go b/var.go
index 2d0cb21..51160e2 100644
--- a/var.go
+++ b/var.go
@@ -1,6 +1,7 @@
package stm
import (
+ "sync"
"sync/atomic"
"unsafe"
)
@@ -8,7 +9,8 @@ import (
// Holds an STM variable.
type Var struct {
state *varSnapshot
- watchers map[*Tx]struct{}
+ watchers sync.Map
+ mu sync.Mutex
}
func (v *Var) addr() *unsafe.Pointer {
@@ -35,6 +37,5 @@ func NewVar(val interface{}) *Var {
state: &varSnapshot{
val: val,
},
- watchers: make(map[*Tx]struct{}),
}
}