zoukankan      html  css  js  c++  java
  • C#中Random

    说明:C#中的随机数是一个伪随机数,随机数字从一组有限的数字选择以相同的概率,所选的数字不是完全随机的,因为使用数学算法来选择它们。在大多数Windows系统中,Random的15毫秒内创建的对象很可能会有相同的种子值,Random类不是线程安全,若要避免此问题,请创建一个Random对象而不是多个对象,可以把这个random对象写成静态的。

    例子

    ``` C#  多个new对象
    List<Task> tasks = new List<Task>();
    for (int i = 0; i < 10; i++) {
        
        var t = Task.Run(() =>
        {
            var a = new Random();
            Console.WriteLine(a.Next());
        });
        tasks.Add(t);
    }
    
    Task.WaitAll(tasks.ToArray());
    
    //结果
    //1522489488
    //145533769
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    //1941645525
    ```
    
    ``` C# 一个对象
    var a = new Random();
    List<Task> tasks = new List<Task>();
    for (int i = 0; i < 10; i++) {
        
        var t = Task.Run(() =>
        {
            Console.WriteLine(a.Next());
        });
        tasks.Add(t);
    }
    
    Task.WaitAll(tasks.ToArray());
    //结果
    //2096161011
    //1984131754
    //349870744
    //1887940592
    //2036172948
    //583109263
    //603018983
    //907326994
    //25452174
    //901934441
    ```

    结论

    当有多线程访问的时候,不要在线程中使用new对象,或者写成static

    微软Random源码地址

    https://referencesource.microsoft.com/#mscorlib/system/random.cs,dec894a7e816e665

  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/zhao123/p/10942310.html
Copyright © 2011-2022 走看看