namespace Solver
{
using System;
using System.Collections.Generic;
using System.Threading;
internal static class MyExtensions
{
public static void Shuffle<T>(this IList<T> list)
{
var n = list.Count;
while (n > 1)
{
n--;
var k = ThreadSafeRandom.ThisThreadsRandom.Next(n + 1);
var value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
public static class ThreadSafeRandom
{
[ThreadStatic]
private static Random Local;
public static Random ThisThreadsRandom
{
get
{
return Local ??
(Local = new Random(unchecked(Environment.TickCount * 31 + Thread.CurrentThread.ManagedThreadId)));
}
}
}
}
{
using System;
using System.Collections.Generic;
using System.Threading;
internal static class MyExtensions
{
public static void Shuffle<T>(this IList<T> list)
{
var n = list.Count;
while (n > 1)
{
n--;
var k = ThreadSafeRandom.ThisThreadsRandom.Next(n + 1);
var value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
public static class ThreadSafeRandom
{
[ThreadStatic]
private static Random Local;
public static Random ThisThreadsRandom
{
get
{
return Local ??
(Local = new Random(unchecked(Environment.TickCount * 31 + Thread.CurrentThread.ManagedThreadId)));
}
}
}
}
No comments:
Post a Comment