2017-10-17 142 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是线程安全的。