zoukankan      html  css  js  c++  java
  • 【C#】List 并发丢数据问题

    项目中出了个 BUG,就在我眼皮子底下,很明显的一个 BUG,愣是看了两天才看出来。

    我有多个任务并发,任务执行完成后都有一个返回结果,我用一个 List 将结果收集起来,等所有任务完成后,发送出去。结果一直 丢数据

    我反复检查逻辑都没有问题,最后恍然 List 是非线程安全的。

    大家都知道 List 是非线程安全的,但是如果仅有 Add 操作呢?估计有些人就会认为没问题。

    下面的代码,期望输出的结果是 1000,然而,注释掉 lock 后,结果就不一样了。

    class Program
    {
        static List<Person> persons;
    
        static void Main(string[] args)
        {
            persons = new List<Person>();
    
            object sync = new object();
    
            Parallel.For(0, 1000, (i) =>
            {
                Person person = new Person
                {
                    ID = i,
                    Name = "name" + i
                };
                lock (sync)
                    persons.Add(person);
            });
    
            Console.WriteLine(persons.Count);
            Console.ReadLine();
        }
    
        class Person
        {
            public int ID { get; set; }
            public string Name { get; set; }
        }
    }
    

    ------------------------------------ END ------------------------------------

    欢迎扫码关注我的公众号


    码农升级
  • 相关阅读:
    viewpaper
    mfc ui 3 swf
    mfc ui3
    mfc ui2
    mfc ui库
    将Cocos2dX渲染到MFC窗口上
    MFC 框架技术简单研讨
    不可忽略的数据库缓存重建
    google bookmarket api
    android 加载大图片
  • 原文地址:https://www.cnblogs.com/gl1573/p/14392108.html
Copyright © 2011-2022 走看看