Advertisement
SoL_Alex

Untitled

Jul 21st, 2023
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.00 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace SignsOfLife.Utils
  8. {
  9.     public class ThreadSafeRandom
  10.     {
  11.         private static readonly Random _global = new Random();
  12.         [ThreadStatic] private static Random _local;
  13.  
  14.         public int Next()
  15.         {
  16.             if (_local == null)
  17.             {
  18.                 lock (_global)
  19.                 {
  20.                     if (_local == null)
  21.                     {
  22.                         int seed = _global.Next();
  23.                         _local = new Random(seed);
  24.                     }
  25.                 }
  26.             }
  27.  
  28.             return _local.Next();
  29.         }
  30.  
  31.         public int Next(int minValue, int maxValue)
  32.         {
  33.             if (_local == null)
  34.             {
  35.                 lock (_global)
  36.                 {
  37.                     if (_local == null)
  38.                     {
  39.                         int seed = _global.Next();
  40.                         _local = new Random(seed);
  41.                     }
  42.                 }
  43.             }
  44.  
  45.             return _local.Next(minValue, maxValue);
  46.         }
  47.  
  48.         public int Next(int maxValue)
  49.         {
  50.             if (_local == null)
  51.             {
  52.                 lock (_global)
  53.                 {
  54.                     if (_local == null)
  55.                     {
  56.                         int seed = _global.Next();
  57.                         _local = new Random(seed);
  58.                     }
  59.                 }
  60.             }
  61.  
  62.             return _local.Next(maxValue);
  63.         }
  64.  
  65.         public double NextDouble()
  66.         {
  67.             if (_local == null)
  68.             {
  69.                 lock (_global)
  70.                 {
  71.                     if (_local == null)
  72.                     {
  73.                         int seed = _global.Next();
  74.                         _local = new Random(seed);
  75.                     }
  76.                 }
  77.             }
  78.  
  79.             return _local.NextDouble();
  80.         }
  81.     }
  82. }
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement