.net 如果在函数内部创建了一个新的集合示例,它是线程安全的吗?

cbeh67ev  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(178)

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

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

字符串

bqf10yzr

bqf10yzr1#

你的问题有点模棱两可。
线程安全是指一个对象或方法是否可以被多个线程同时访问。从这个意义上说,答案是no,本地List<T>仍然是线程不安全的。
如果你在问,让多个线程同时调用AddToCollection安全吗?答案是yes,因为在任何时候,这个list只能通过这个方法访问,而没有多线程为它服务,这自然是安全的。
需要再次指出的是,如果你在这个方法中创建了多个线程来访问列表,那么这个列表仍然是不安全的。例如,这是不安全的:

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

字符串

相关问题