NET 4.0中的SpinWait方法和4.0之前的SpinWait方法有什么不同?

3

MSDN的".NET Framework 4线程安全集合"中提到:

"一些并发集合类型使用轻量级同步机制,例如SpinLockSpinWaitSemaphoreSlimCountdownEvent,这些机制是.NET Framework 4中的新功能。"

然而MSDN网站的文章指出从.NET 1.1版本开始就有了SpinWait,而另一篇MSDN文章则表示SpinWait是从.NET 4.0版本开始的

Lee Grissom在回答“SynchronizedCollection和其他并发集合之间有什么区别?”时的评论以及第一个MSDN引用都提到了.NET 4.0中新的SpinWait对象来解决线程安全问题。

那么,它是新功能还是旧功能?
如果是新功能,它又是如何实现的呢?


1
从您提供的链接来看,没有其他信息的情况下,似乎 .NET 1.1 中存在 a SpinWait 函数,而 .NET 4.0 中添加了 SpinWait 结构。 - ta.speot.is
2个回答

8

System.Threading.SpinWait结构体是在.NET 4中引入的。而System.Threading.Thread.SpinWait方法则从.NET 1.0开始就存在。

来自SpinWait结构体的文档:

SpinWait通常不适用于普通应用程序。在大多数情况下,您应该使用.NET Framework提供的同步类,例如Monitor。然而,在大多数需要自旋等待的情况下,应优先选择SpinWait类型而非SpinWait方法。

请注意,其中有一部分说你在大多数情况下都不应该使用它们 :)


看起来所有关于线程安全的答案都是不安全的。这是在密谋阻止我进行多线程编程吗? - Fulproof

3

结构体System.Threading.SpinWait是.NET 4.0中新增的。方法System.Threading.Thread.SpinWait()自.NET 1.0就存在。

请注意,System.Threading.SpinWait内部调用了System.Threading.Thread.SpinWait()方法。更多细节请参见Joe Duffy的《Windows并发编程》第14章第"Spin Waiting"一节。


哦,又是那本书。没有更多关于并发的.NET书籍了,只有一本? - Fulproof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接