我有一个抽象类,它有一个受保护的方法。我在这个方法中使用字典。这个类有2个实现。这两个类都为这个受保护的方法调用 一些操作。如果两个实现都在不同的线程中运行,那么受保护的方法线程中的字典是否安全?
受保护的方法如下
protected Dictionary<string, string> GenerateParameterFromQueue()
{
Dictionary<string, string> parameters;
string queueInput = this._Queue.QueueInput;
string[] inputArray = Regex.Split(queueInput,Constants.KEY_DELIMITER);
parameters = inputArray.ToDictionary(s => s.Split(Convert.ToChar(Constants.KEY_EQUALITY))[0], s => s.Split(Convert.ToChar(Constants.KEY_EQUALITY))[1]);
return parameters;
}
答案 0 :(得分:2)
是的,因为方法中的字典是在方法本身内的每个线程中创建的,所以Dictionary
的使用是线程安全的。当然,这并不意味着在返回之后在方法之外对它的任何使用都是自动线程安全的。
只有当两个线程访问/更改单个Dictionary
时才会出现问题。它与受保护的方法无关。
我在方法中担心的是this._Queue变量,因为它在多个线程之间共享而你没有锁定它,你需要确保它本身的线程安全。
答案 1 :(得分:0)
字典是&#34;线程安全&#34;但不是因为它是一种受保护的方法。它是线程安全的,因为你是从头开始生成字典。
答案 2 :(得分:0)
protected
关键字仅表示该方法仅在包含类型或子类中可见。它不使其线程安全。正在为方法的每个线程调用创建Dictionary
,这使得Dictionary
线程在此示例中是安全的...
对于线程安全集合,请参阅ConcurrentCollection类。
我希望这会有所帮助。