From d130a2ba8fc6ff43427fece71d7803c81049a9e7 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Sat, 7 Dec 2013 11:34:28 +0100 Subject: [PATCH] Random: MersenneTwister.Default (thread-safe) --- src/Numerics/Random/MersenneTwister.cs | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/Numerics/Random/MersenneTwister.cs b/src/Numerics/Random/MersenneTwister.cs index ddff6188..c23a8c11 100644 --- a/src/Numerics/Random/MersenneTwister.cs +++ b/src/Numerics/Random/MersenneTwister.cs @@ -67,6 +67,7 @@ */ using System; +using System.Threading; namespace MathNet.Numerics.Random { @@ -159,6 +160,36 @@ namespace MathNet.Numerics.Random { init_genrand((uint)seed); } + +#if PORTABLE + [ThreadStatic] + static MersenneTwister DefaultInstance; + + /// + /// Default instance, thread-safe. + /// + public static MersenneTwister Default + { + get + { + if (DefaultInstance == null) + { + DefaultInstance = new MersenneTwister(RandomSeed.Guid(), true); + } + return DefaultInstance; + } + } +#else + static readonly ThreadLocal DefaultInstance = new ThreadLocal(() => new MersenneTwister(RandomSeed.Guid(), true)); + + /// + /// Default instance, thread-safe. + /// + public static MersenneTwister Default + { + get { return DefaultInstance.Value; } + } +#endif /*/// /// Initializes a new instance of the class.