【发布时间】:2012-06-17 15:09:57
【问题描述】:
许多线程都可以访问summary。每个线程都有一个唯一的键来访问字典;
Dictionary<string, List<Result>> summary;
以下操作是否需要锁定?
summary[key] = new List<Result>()summary[key].Add(new Result());
似乎我不需要锁定,因为每个线程都会使用不同的键访问字典,但 (1) 不会因为同时向字典中添加新记录而与其他线程一起出现问题?
【问题讨论】:
-
要么可以修改整个字典(即,它用于保存数据的任何数据结构),因此需要锁定。例如,在哈希表中,键可能会发生冲突;在树中,两者都可能尝试旋转相同的子树。 IOW,是的,除非有问题的字典特别支持并发访问,否则您需要锁定。
-
@Jerry,您的“评论”与答案有何区别?
-
@KirkWoll:我不确定 .NET 如何定义其 Dictionary 类。此外,它足够短,可以放在评论中。 :-)
标签: c# multithreading dictionary locking