Heim > Backend-Entwicklung > Golang > Wie sorgt die Verwendung von Kanälen durch MaybeReadByte für „zufälliges' Verhalten in Go?

Wie sorgt die Verwendung von Kanälen durch MaybeReadByte für „zufälliges' Verhalten in Go?

王林
Freigeben: 2024-02-06 09:55:03
nach vorne
447 Leute haben es durchsucht

MaybeReadByte 对通道的使用如何在 Go 中提供“随机”行为?

Frageninhalt

Läuft einer von Gos crypto/rand 包中的 Prime 函数(生成可能的素数)中,它调用 crypto/internal/randutil 包中的 MaybeReadByte 函数(如下所示)。根据函数描述,我可以理解为什么使用它,但我不明白这个实现如何有 50% 的机会读取字节。难道不应该保证 cases 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[:])
    }
}
Nach dem Login kopieren

Richtige Antwort


Nein.

Nach Vorgaben:

Da beide caseden 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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage