如果在函数中创建了新的集合实例,它是否是线程安全的?

If a new instance of collection is created inside a function is it thread safe?

提问人:Ambareesh 提问时间:10/30/2023 最后编辑:Theodor ZouliasAmbareesh 更新时间:10/30/2023 访问量:48

问:

我刚刚读到 C# 集合不是线程安全的,如果我每次在函数中创建一个新的集合实例作为局部变量怎么办?它仍然不是线程安全的吗?

public void AddToCollection(int item)
{
    List<int> collection = new List<int>();
    collection.Add(item);
}
C# .NET 集合 线程安全

评论

0赞 Mitch Wheat 10/30/2023
“我刚刚在 c# 集合中读到不是线程安全的”——这是正确的。
0赞 Mitch Wheat 10/30/2023
stackoverflow.com/questions/60965734/......
1赞 Theodor Zoulias 10/30/2023
同样的原则也适用于你上一个问题List<T>SqlConnection

答:

2赞 shingo 10/30/2023 #1

你的问题有些模棱两可。

线程安全是指一个对象或方法是否可以由多个线程同时访问。从这个意义上说,答案是否定的,本地线程仍然是不安全的。List<T>

如果你问,让多个线程同时调用是否安全?答案是肯定的,因为在任何时候,这个列表都只能通过这种方法访问,并且没有多线程,这自然是安全的。AddToCollection

应该再次注意的是,如果在此方法中创建多个访问列表的线程,则此列表仍然是不安全的。例如,这是不安全的:

public void AddToCollection(int item)
{
    List<int> collection = new List<int>();
    Task.Run(() => collection.Add(item));
    Task.Run(() => collection.Add(item));
}