Реализация случайного провайдера в .Net 3.5

Вот кульминация сообщения Skeet для случайного провайдера:

public static class RandomProvider
{    
    private static int seed = Environment.TickCount;

    private static ThreadLocal randomWrapper = new ThreadLocal(() =>
        new Random(Interlocked.Increment(ref seed))
    );

    public static Random GetThreadRandom()
    {
        return randomWrapper.Value;
    }
}

Я хотел бы использовать ту же концепцию в проекте .NET 3.5, поэтому ThreadLocal не вариант.

Как бы вы изменили код, чтобы иметь потокобезопасный случайный провайдер без помощи ThreadLocal?

ОБНОВЛЕНИЕ

Хорошо, пока я использую [ThreadStatic] Саймона, поскольку я понимаю его лучше всего. Здесь много полезной информации, которую можно пересмотреть и переосмыслить, если позволит время. Спасибо всем!

public static class RandomProvider
{
    private static int _seed = Environment.TickCount;

    [ThreadStatic]
    private static Random _random;

    /// 
    /// Gets the thread safe random.
    /// 
    /// 
    public static Random GetThreadRandom() { return _random ?? (_random = new Random(Interlocked.Increment(ref _seed))); }
}

8
задан Peter O. 16 March 2012 в 20:18
поделиться