Shr*_*roy 0 c# multithreading thread-safety
在阅读Joe Albahari的优秀着作"C#中的线程"时,我遇到了以下含糊不清的句子:
线程安全类型不一定使程序使用它是线程安全的,并且后者涉及的工作通常使前者冗余.
(您可以在此页面上找到该句子;只需搜索"不确定性"即可快速跳转到相应的部分.)
我希望使用ConcurrentDictionary来实现某些线程安全的数据结构.段落告诉我ConcurrentDictionary不保证对我的数据结构的线程安全写入吗?有人可以提供一个反例,显示线程安全类型实际上无法提供线程安全吗?
在此先感谢您的帮助.
最简单的是,线程安全列表或字典就是一个很好的例子; 让每个单独的操作线程保持安全并不总是足够的 - 例如,"检查列表是否为空;如果是,则添加项目" - 即使所有线程安全,您也不能这样做:
if(list.Count == 0) list.Add(foo);
Run Code Online (Sandbox Code Playgroud)
因为它可能会在两者之间发生变化.您需要同步测试和更改.