namespace AIStudio.Tools;
///
public sealed class ThreadSafeRandom : Random
{
private static readonly object LOCK = new();
#region Overrides of Random
///
public override int Next()
{
lock (LOCK)
return base.Next();
}
///
public override int Next(int maxValue)
{
lock (LOCK)
return base.Next(maxValue);
}
///
public override int Next(int minValue, int maxValue)
{
lock (LOCK)
return base.Next(minValue, maxValue);
}
///
public override void NextBytes(byte[] buffer)
{
lock (LOCK)
base.NextBytes(buffer);
}
///
public override void NextBytes(Span buffer)
{
lock (LOCK)
base.NextBytes(buffer);
}
///
public override double NextDouble()
{
lock (LOCK)
return base.NextDouble();
}
///
public override long NextInt64()
{
lock (LOCK)
return base.NextInt64();
}
///
public override long NextInt64(long maxValue)
{
lock (LOCK)
return base.NextInt64(maxValue);
}
///
public override long NextInt64(long minValue, long maxValue)
{
lock (LOCK)
return base.NextInt64(minValue, maxValue);
}
///
public override float NextSingle()
{
lock (LOCK)
return base.NextSingle();
}
///
protected override double Sample()
{
lock (LOCK)
return base.Sample();
}
#endregion
}