提交 cc7a869e 作者: Juan Batiz-Benet

threadsafe SeededRand

上级 6e9cb06b
package testutil
import (
"math/rand"
"sync"
"time"
)
var SeededRand *rand.Rand
func init() {
SeededRand = NewSeededRand(time.Now().UTC().UnixNano())
}
func NewSeededRand(seed int64) *rand.Rand {
src := rand.NewSource(seed)
return rand.New(&LockedRandSource{src: src})
}
type LockedRandSource struct {
lk sync.Mutex
src rand.Source
}
func (r *LockedRandSource) Int63() (n int64) {
r.lk.Lock()
n = r.src.Int63()
r.lk.Unlock()
return
}
func (r *LockedRandSource) Seed(seed int64) {
r.lk.Lock()
r.src.Seed(seed)
r.lk.Unlock()
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论