go语言生成随机数,保证并发场景下不会有相同的随机数
时间: 2023-07-07 10:03:49 浏览: 158
在Go语言中生成随机数可以使用math/rand包。为了保证并发场景下不会有相同的随机数,可以使用sync.Mutex锁来保证代码的互斥访问。
以下是一个生成随机数的示例代码:
```go
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
var wg sync.WaitGroup
var mu sync.Mutex
var nums []int
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
mu.Lock()
defer mu.Unlock()
num := rand.Intn(100)
nums = append(nums, num)
wg.Done()
}()
}
wg.Wait()
fmt.Println(nums)
}
```
在这个示例中,我们使用rand.Seed函数来设置随机数种子,以保证每次运行程序时生成的随机数都不同。
然后,我们使用sync.Mutex锁来保证在多个goroutine同时生成随机数时,每次只有一个goroutine能够访问共享的nums切片,并将生成的随机数添加到该切片中。
最后,我们使用sync.WaitGroup等待所有goroutine完成,并输出生成的随机数。
阅读全文