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

问题描述 投票:0回答:1

我刚刚读到 C# 集合不是线程安全的,如果我每次在函数内创建一个新的集合实例作为局部变量会怎样?难道还不是线程安全的吗?

public void AddToCollection(int item)
{
    List<int> collection = new List<int>();
    collection.Add(item);
}
c# .net multithreading collections thread-safety
1个回答
0
投票

你的问题有点含糊。

线程安全是指一个对象或方法是否可以被多个线程同时访问。从这个意义上说,答案是,本地

List<T>
仍然是线程不安全的。

如果您问,多个线程同时调用

AddToCollection
是否安全?答案是,因为任何时候,这个列表都只能通过这个方法来访问,而且没有多线程,自然是安全的。

再次需要注意的是,如果你在这个方法中创建了多个访问列表的线程,那么这个列表仍然是不安全的。例如,这是不安全的:

public void AddToCollection(int item)
{
    List<int> collection = new List<int>();
    Task.Run(() => collection.Add(item));
    Task.Run(() => collection.Add(item));
}
© www.soinside.com 2019 - 2024. All rights reserved.