...
1 package rand
2
3 import (
4 "math/rand"
5 "sync"
6 )
7
8
9 func Int() int { return pseudo.Int() }
10
11
12
13 func Intn(n int) int { return pseudo.Intn(n) }
14
15
16
17 func Int63n(n int64) int64 { return pseudo.Int63n(n) }
18
19
20 func Perm(n int) []int { return pseudo.Perm(n) }
21
22
23
24
25 func Seed(n int64) { pseudo.Seed(n) }
26
27 var pseudo = rand.New(&source{src: rand.NewSource(1)})
28
29 type source struct {
30 src rand.Source
31 mu sync.Mutex
32 }
33
34 func (s *source) Int63() int64 {
35 s.mu.Lock()
36 n := s.src.Int63()
37 s.mu.Unlock()
38 return n
39 }
40
41 func (s *source) Seed(seed int64) {
42 s.mu.Lock()
43 s.src.Seed(seed)
44 s.mu.Unlock()
45 }
46
47
48
49
50 func Shuffle(n int, swap func(i, j int)) { pseudo.Shuffle(n, swap) }
51
View as plain text