mirror of
https://github.com/golang/go.git
synced 2025-05-25 17:31:22 +00:00
runtime: tighten select permutation generation
This is the optimization made to math/rand in CL 21030043. Change-Id: I231b24fa77cac1fe74ba887db76313b5efaab3e8 Reviewed-on: https://go-review.googlesource.com/9269 Reviewed-by: Minux Ma <minux@golang.org>
This commit is contained in:
parent
3787950a92
commit
fd5540e7e5
@ -244,13 +244,9 @@ func selectgoImpl(sel *hselect) (uintptr, uint16) {
|
||||
pollslice := slice{unsafe.Pointer(sel.pollorder), int(sel.ncase), int(sel.ncase)}
|
||||
pollorder := *(*[]uint16)(unsafe.Pointer(&pollslice))
|
||||
for i := 0; i < int(sel.ncase); i++ {
|
||||
pollorder[i] = uint16(i)
|
||||
}
|
||||
for i := 1; i < int(sel.ncase); i++ {
|
||||
o := pollorder[i]
|
||||
j := int(fastrand1()) % (i + 1)
|
||||
pollorder[i] = pollorder[j]
|
||||
pollorder[j] = o
|
||||
pollorder[j] = uint16(i)
|
||||
}
|
||||
|
||||
// sort the cases by Hchan address to get the locking order.
|
||||
|
Loading…
x
Reference in New Issue
Block a user