我刚刚读到C#集合不是线程安全的,如果我每次都在函数内部创建一个新的集合示例作为局部变量,它仍然不是线程安全的吗?
public void AddToCollection(int item) { List<int> collection = new List<int>(); collection.Add(item); }
字符串
bqf10yzr1#
你的问题有点模棱两可。线程安全是指一个对象或方法是否可以被多个线程同时访问。从这个意义上说,答案是no,本地List<T>仍然是线程不安全的。如果你在问,让多个线程同时调用AddToCollection安全吗?答案是yes,因为在任何时候,这个list只能通过这个方法访问,而没有多线程为它服务,这自然是安全的。需要再次指出的是,如果你在这个方法中创建了多个线程来访问列表,那么这个列表仍然是不安全的。例如,这是不安全的:
List<T>
AddToCollection
public void AddToCollection(int item) { List<int> collection = new List<int>(); Task.Run(() => collection.Add(item)); Task.Run(() => collection.Add(item)); }
1条答案
按热度按时间bqf10yzr1#
你的问题有点模棱两可。
线程安全是指一个对象或方法是否可以被多个线程同时访问。从这个意义上说,答案是no,本地
List<T>
仍然是线程不安全的。如果你在问,让多个线程同时调用
AddToCollection
安全吗?答案是yes,因为在任何时候,这个list只能通过这个方法访问,而没有多线程为它服务,这自然是安全的。需要再次指出的是,如果你在这个方法中创建了多个线程来访问列表,那么这个列表仍然是不安全的。例如,这是不安全的:
字符串