SpinLock和只读字段

时间:2012-02-10 21:16:18

标签: c# .net multithreading c#-4.0 .net-4.0

只需阅读MSDN page关于新.NET 4.0功能SpinLock的内容,并且无法理解以下声明背后的想法:

  

不要将SpinLock实例存储在只读字段中。

我的感觉是,这在某种程度上与价值类型细节有关,但不确定究竟是什么以及为何如此。任何人都可以为这一点带来更多亮点吗?

1 个答案:

答案 0 :(得分:14)

底层问题是,当您在其上调用非静态方法并在副本上执行该方法时,C#编译器会创建readonly值类型字段的副本 - 因为方法可以< / em>具有更改结构值的副作用 - readonly字段不允许这样做。

有关进一步说明,请参阅"Mutating Readonly Structs"