Läuft einer von Gos crypto/rand
包中的 Prime 函数(生成可能的素数)中,它调用 crypto/internal/randutil
包中的 MaybeReadByte
函数(如下所示)。根据函数描述,我可以理解为什么使用它,但我不明白这个实现如何有 50% 的机会读取字节。难道不应该保证 case
s vor dem anderen?
var ( closedChanOnce sync.Once closedChan chan struct{} ) // MaybeReadByte reads a single byte from r with ~50% probability. This is used // to ensure that callers do not depend on non-guaranteed behaviour, e.g. // assuming that rsa.GenerateKey is deterministic w.r.t. a given random stream. // // This does not affect tests that pass a stream of fixed bytes as the random // source (e.g. a zeroReader). func MaybeReadByte(r io.Reader) { closedChanOnce.Do(func() { closedChan = make(chan struct{}) close(closedChan) }) select { case <-closedChan: return case <-closedChan: var buf [1]byte r.Read(buf[:]) } }
Nein.
Da beide case
den gleichen Kanal lesen, können sie es immer gleichzeitig tun.
Das obige ist der detaillierte Inhalt vonWie sorgt die Verwendung von Kanälen durch MaybeReadByte für „zufälliges' Verhalten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!