我发现《实践中的Java并发性》一书是编写Java多线程代码的出色指南。我想知道书中描述的一般原理在多大程度上适用于.Net。我对滚动自己的无锁代码不感兴趣–我只想使用扎实,可理解的技术并利用现有的同步和并发API。在此程度上,对我而言,这本书的主要收获是:
我希望所有这些工作都会给生活带来不必要的困难,但是从我已经准备好的.Net模型(至少是指定的)来看,它是相当薄弱的。有没有人尝试为.NET构建事前模型?我认为这是.Net急需解决的领域。据我所知,没有一本等效的.Net书可以提供相同的“舒适度” –似乎至少部分问题是缺乏针对.NET的明确定义的内存模型。
一般概念是相同的。但是,需要考虑Java和.NET内存模型之间的差异。这通常涉及使用Interlocked函数(在Java中),VolatileRead / VolatileWrite或显式内存屏障。
为.NET指定了两种内存模型。.NET Framework ECMA标准的第12节,分区I中指定的弱内存模型。实际上,更强大的内存模型是由.NET Framework运行时实现的。乔·达菲(Joe Duffy)描述了另一种定义。IKVM.NET博客描述了一种。NET内存模型与Java有所不同的实际情况。
关于您的观点:
锁定的工作方式与Java中的锁定方式相同。
安全发布-前两个方案(锁和volatile)的工作方式与Java对应方案相同。
.NET中不推荐使用同步集合,但是它们在内部使用了锁定,因此它们的工作方式与访问被锁定的方式完全相同。
作为.NET 3.5的一部分添加的并发集合在内部使用无锁技术,因此它们应在不同线程之间保持内存一致性。我不确定它们是否与内存一致。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句