rendered paste bodyIndex: Mono.Math/BigInteger.cs
===================================================================
--- Mono.Math/BigInteger.cs (revision 81399)
+++ Mono.Math/BigInteger.cs (working copy)
@@ -500,11 +500,36 @@
#endregion
#region Random
+
+ private class ThreadSafeRandomNumberGenerator : RandomNumberGenerator {
+
+ static object locker = new object ();
+ private RandomNumberGenerator rng;
+
+ public ThreadSafeRandomNumberGenerator ()
+ {
+ rng = RandomNumberGenerator.Create ();
+ }
+
+ public override void GetBytes (byte[] data)
+ {
+ lock (locker)
+ rng.GetBytes (data);
+ }
+
+ public override void GetNonZeroBytes (byte[] data)
+ {
+ lock (locker)
+ rng.GetNonZeroBytes (data);
+ }
+ }
+
+ [ThreadStatic]
private static RandomNumberGenerator rng;
private static RandomNumberGenerator Rng {
get {
if (rng == null)
- rng = RandomNumberGenerator.Create ();
+ rng = new ThreadSafeRandomNumberGenerator ();
return rng;
}
}