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.