.net中如何证明List<int>是线程非安全的

 

  我们可以通过以下代码来验证 List<int> 为何是线程非安全的,执行以下代码,然后查看输出结果。 

 

 static void Main()
    {

        var toCount = 100;
        #region list线程非安全
        var list = new List<int>();
        // 并行添加元素
        Parallel.For(0, toCount, i =>
        {
            list.Add(i);
        //Thread.Sleep(10);

        });
        Console.WriteLine($"list count {list.Count}");
        #endregion
        Console.ReadLine();
    }

 

使用  Parallel.For  来并发添加元素,执行数次之后发现输出的都为100,看起来似乎没有什么问题。


但是增加   Thread.Sleep(10);  这一行,目的是为了 增加多个线程同时 修改共享资源的概率。

再次运行,发现list只增加了89个元素。

这说明 List<int>是 非线程安全的。

 

posted @ 2023-08-14 17:21  超难微猫  阅读(24)  评论(0编辑  收藏  举报