mosn

Форк
0
/
common.go 
54 строки · 981.0 Байт
1
package util
2

3
import (
4
	"math/rand"
5
	"sync"
6
	"time"
7
)
8

9
// tools
10
var r *rand.Rand
11

12
func init() {
13
	r = rand.New(rand.NewSource(time.Now().UnixNano()))
14
}
15
func RandomDuration(min, max time.Duration) time.Duration {
16
	if min > max {
17
		return min
18
	}
19
	d := r.Int63n(int64(max - min))
20
	return time.Duration(d) * time.Nanosecond
21
}
22
func IsMapEmpty(m *sync.Map) bool {
23
	empty := true
24
	//If there is a key in the map, return not empty
25
	m.Range(func(key, value interface{}) bool {
26
		empty = false
27
		return false
28
	})
29
	return empty
30
}
31
func WaitMapEmpty(m *sync.Map, timeout time.Duration) bool {
32
	ch := make(chan struct{})
33
	go func() {
34
		for {
35
			select {
36
			case <-ch:
37
				return
38
			default:
39
				if IsMapEmpty(m) {
40
					close(ch)
41
					return
42
				}
43
				time.Sleep(500 * time.Millisecond)
44
			}
45
		}
46
	}() //check goroutine
47
	select {
48
	case <-time.After(timeout):
49
		close(ch)            // finish check goroutine
50
		return IsMapEmpty(m) // timeout, retry again
51
	case <-ch:
52
		return true //map empty
53
	}
54
}
55

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

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

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

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