0

我有一个具有受保护方法的抽象类。我在这个方法中使用字典。这个类有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;
    }
4

3 回答 3

2

是的,由于方法中的字典是在方法本身内的每个线程中创建的,因此您对 的使用Dictionary是线程安全的。当然,这并不意味着在它返回后在方法之外的任何使用都是自动线程安全的。

只有当两个线程访问/更改一个线程时Dictionary,您才会遇到问题。它与被保护的方法无关。

The thing I'd worry about in the method is the this._Queue variable though, since it's shared between multiple threads and you're not locking it, you need to make sure that it's thread safe in itself.

于 2012-09-25T11:31:41.923 回答
0

字典是“线程安全的”,但不是因为它是受保护的方法。它是线程安全的,因为您是从头开始生成字典。

于 2012-09-25T11:29:22.520 回答
0

protected关键字 only 表示该方法仅在包含类型或子类中可见。它不会使它成为线程安全的。Dictionary正在为每个线程调用该方法创建,这使得该Dictionary示例中的线程安全......

对于线程安全集合,请参见ConcurrentCollection类。

我希望这有帮助。

于 2012-09-25T11:29:26.053 回答