cubefs

Форк
0
56 строк · 1.3 Кб
1
/*
2
 *
3
 * Copyright 2018 gRPC authors.
4
 *
5
 * Licensed under the Apache License, Version 2.0 (the "License");
6
 * you may not use this file except in compliance with the License.
7
 * You may obtain a copy of the License at
8
 *
9
 *     http://www.apache.org/licenses/LICENSE-2.0
10
 *
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * See the License for the specific language governing permissions and
15
 * limitations under the License.
16
 *
17
 */
18

19
// Package grpcrand implements math/rand functions in a concurrent-safe way
20
// with a global random source, independent of math/rand's global source.
21
package grpcrand
22

23
import (
24
	"math/rand"
25
	"sync"
26
	"time"
27
)
28

29
var (
30
	r  = rand.New(rand.NewSource(time.Now().UnixNano()))
31
	mu sync.Mutex
32
)
33

34
// Int63n implements rand.Int63n on the grpcrand global source.
35
func Int63n(n int64) int64 {
36
	mu.Lock()
37
	res := r.Int63n(n)
38
	mu.Unlock()
39
	return res
40
}
41

42
// Intn implements rand.Intn on the grpcrand global source.
43
func Intn(n int) int {
44
	mu.Lock()
45
	res := r.Intn(n)
46
	mu.Unlock()
47
	return res
48
}
49

50
// Float64 implements rand.Float64 on the grpcrand global source.
51
func Float64() float64 {
52
	mu.Lock()
53
	res := r.Float64()
54
	mu.Unlock()
55
	return res
56
}
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.