2017-10-17 97 views

回答

2

因爲,據我所知,目前還沒有正式的(甚至任何)C#充氣城堡端口的文件 - 所有我們能做的就是看源代碼,並試圖得出一些結論。這裏是SecureRandom的源代碼。我們可以看到主要的方法有NextCounterValue(用於生成種子)和NextBytes用於生成實際的隨機數據。 NextCounterValue是線程安全的(使用Interlocked.Increment)。 NextBytes將實施轉發到IRandomGenerator的實例。既然你可以傳遞任何IRandomGenerator實例的SecureRandom構造 - 我們可以斷定,它的線程安全取決於的IRandomGenerator使用。

還當上完整的.NET框架,SecureRandom使用CryptoApiRandomGenerator作爲主發生器(生成種子)以及一個只是包裝器.NET RNGCryptoServiceProvider正如我們所知道的是線程安全的。

如果你只是創建SecureRandom不傳遞任何IRandomGenerator?然後,它會創建的DigestRandomGeneratorcode)實例,它似乎是線程安全的(使用簡單lockNextBytes)。

總而言之,如果您未通過IRandomGenerator的線程安全的實例,則可以說SecureRandom是線程安全的。