Golang是一種編程語言,它以其高效性和并發性而聞名。然而,關于Golang的加密和線程安全性一直是開發者們關注的重點。在這篇文章中,php小編香蕉將分享關于Golang加密和Golang線程安全性的一些觀點和建議。我們將探討Golang在加密方面的特性,以及如何確保線程安全性,以幫助開發者更好地理解和應用Golang。無論你是初學者還是有經驗的開發者,這篇文章都將為你提供有價值的信息和指導。
問題內容
math/rand.rand 的源指出 read
不是線程安全的(共享源時)。加密/蘭特怎么樣?源代碼指出它使用 getrandom(2)
或 /dev/urandom
,但尚不清楚并發調用會發生什么。
更新:評論有助于澄清區別
crypto/rand.Reader.Read(b []byte) crypto/rand.Read(b []byte)
登錄后復制
線程安全:
-
并發調用
read
會panic嗎?并發調用時會保持隨機序列嗎?或者可以向并發調用者提供重復的內容嗎?
解決方法
rand.Reader
來自 crypto/rand
必須對于并發訪問是安全的,因為它被定義為“加密安全隨機數生成器的全局共享實例”。無法在包之間同步其使用。
rand.Read
來自 crypto/rand
是安全的,因為 rand.Reader
是安全,并且它不會訪問任何其他共享狀態。