小编Nil*_*osh的帖子

不是线程安全的 - public static List <T>

我在MSDN中读到,当用作公共静态类型时,List是线程安全的.但是,以下代码片段证明了其他情况.我试图添加和删除列表中的元素,但删除方法中途抛出一个错误说索引超出范围.这里出了什么问题?

这是检查我的理论的正确实现吗?如果没有,有人可以建议一个更好的例子.

class Program
{
    public static List<string> strlist = new List<string>();
    public static AutoResetEvent autoEvent = new AutoResetEvent(false);
    static void Main(string[] args)
    {

        strlist = new List<string>();
        new Thread(() => 
        {

            for(int i=0;i<10000000;i++)
            {
         strlist.Add("item1");
            }
            //Thread.Sleep(5000);
            autoEvent.Set();
        }).Start(); ;

        new Thread(() => {

         strlist.ForEach(e => strlist.Remove(e));

        }).Start();

        Console.WriteLine("Waiting");
        autoEvent.WaitOne();
        int ci = 0;

        strlist.ForEach(str => ci++);
        Console.WriteLine(ci.ToString() + " Done");
        Console.Read();


    }

}
Run Code Online (Sandbox Code Playgroud)

c# multithreading thread-safety

0
推荐指数
2
解决办法
1852
查看次数

标签 统计

c# ×1

multithreading ×1

thread-safety ×1