创建rand结构

时间:2014-10-03 21:36:26

标签: go

我在这个代码库中找到了以下内容,有人用这样的TODO评论了这个方法

    // TODO avoid using rand.Float64 method. it uses a singleton lock and may cause
    // performance issues. Instead, instantiate a rand struct and use that to call
    // Float64()

    func standardStrategy(l *ledger) bool {
        return rand.Float64() <= probabilitySend(l.Accounting.Value())
    }

func probabilitySend(ratio float64) float64 {
    x := 1 + math.Exp(6-3*ratio)
    y := 1 / x
    return 1 - y
}

这是什么意思?

1 个答案:

答案 0 :(得分:0)

我认为这意味着:rand包有一个叫Rand结构的东西,它有随机生成函数,可能不会锁定全局锁,所以可能是注释意味着使用此结构。即:

r := rand.New(rand.NewSource(1234))

fmt.Println(r.Float64())

此代码中使用的函数对包是全局的,并使用全局初始化的Rand结构,称为内部globalRand,它具有内部互斥锁。因此,避免使用它可以节省此锁定。