关于C#中线程的文档含糊不清

Shr*_*roy 0 c# multithreading thread-safety

在阅读Joe Albahari的优秀着作"C#中的线程"时,我遇到了以下含糊不清的句子:

线程安全类型不一定使程序使用它是线程安全的,并且后者涉及的工作通常使前者冗余.

(您可以在此页面上找到该句子;只需搜索"不确定性"即可快速跳转到相应的部分.)

我希望使用ConcurrentDictionary来实现某些线程安全的数据结构.段落告诉我ConcurrentDictionary不保证对我的数据结构的线程安全写入吗?有人可以提供一个反例,显示线程安全类型实际上无法提供线程安全吗?

在此先感谢您的帮助.

Mar*_*ell 8

最简单的是,线程安全列表或字典就是一个很好的例子; 让每个单独的操作线程保持安全并不总是足够的 - 例如,"检查列表是否为空;如果是,则添加项目" - 即使所有线程安全,您也不能这样做:

if(list.Count == 0) list.Add(foo);
Run Code Online (Sandbox Code Playgroud)

因为它可能会在两者之间发生变化.您需要同步测试更改.