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.