All pastes #604630 Raw Edit

Someone

public text v1 · immutable
·published 2007-07-05 17:31 UTC
rendered paste body
Index: 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;
                        }
                }