aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/runtime2.go
diff options
context:
space:
mode:
authorWedson Almeida Filho <wedsonaf@google.com>2016-01-24 19:23:48 +0100
committerAustin Clements <austin@google.com>2016-03-15 22:01:20 +0000
commit8e7072ca83f06a0b4afeef6538a4696e1572c5d0 (patch)
tree887c57e2bcd9c05bcda003d24e1b127816b90c70 /src/runtime/runtime2.go
parent87151c82b68023e4224b016a6a66ead2c4b8ece7 (diff)
downloadgo-8e7072ca83f06a0b4afeef6538a4696e1572c5d0.tar.xz
sync: new Cond implementation
Change Cond implementation to use a notification list such that waiters can first register for a notification, release the lock, then actually wait. Signalers never have to park anymore. This is intended to address an issue in the previous implementation where Broadcast could fail to signal all waiters. Results of the existing benchmark are below. Original New Diff BenchmarkCond1-48 2000000 745 ns/op 755 +1.3% BenchmarkCond2-48 1000000 1545 ns/op 1532 -0.8% BenchmarkCond4-48 300000 3833 ns/op 3896 +1.6% BenchmarkCond8-48 200000 10049 ns/op 10257 +2.1% BenchmarkCond16-48 100000 21123 ns/op 21236 +0.5% BenchmarkCond32-48 30000 40393 ns/op 41097 +1.7% Fixes #14064 Change-Id: I083466d61593a791a034df61f5305adfb8f1c7f9 Reviewed-on: https://go-review.googlesource.com/18892 Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Caleb Spare <cespare@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/runtime2.go')
-rw-r--r--src/runtime/runtime2.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index aa87f31250..3ac8f196c5 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -211,7 +211,8 @@ type gobuf struct {
}
// Known to compiler.
-// Changes here must also be made in src/cmd/internal/gc/select.go's selecttype.
+// Changes here must also be made in src/cmd/compile/internal/gc/select.go's
+// selecttype.
type sudog struct {
g *g
selectdone *uint32
@@ -219,7 +220,7 @@ type sudog struct {
prev *sudog
elem unsafe.Pointer // data element
releasetime int64
- nrelease int32 // -1 for acquire
+ ticket uint32
waitlink *sudog // g.waiting list
}