我有以下简单的变量声明,是由反编译器生成的类
Friend Class Project
Private _Status As Integer
Public Property Status As Integer
Get
Return Me._Status
End Get
Set(ByVal value As Integer)
Interlocked.Exchange(Me._Status, value)
End Set
End Property
End Class
此声明是否有任何简写形式。 实际上,这是在类内部使用后台工作人员并由其他类在外部访问的。
要清楚简写的含义是什么。我举个例子: 以下大神为简写
SyncLock lock
z = 1
End SyncLock
详细代码如下
Dim obj As Object = Me.lock
ObjectFlowControl.CheckForSyncLockOnValueType(obj)
Dim flag As Boolean = False
Try
Monitor.Enter(obj, flag)
Me.z = 1
Finally
If (flag) Then
Monitor.[Exit](obj)
End If
End Try
最佳答案
正如 Holterman 所提到的,Interlocked.Exchange 提供的唯一好处是内存屏障。 (Int32
赋值在 .NET 中始终是原子的,并且您将丢弃返回值。)
如果源代码是用 C# 编写的,则它最初可能包含 volatile
关键字,该关键字也会生成内存屏障。
private volatile int _Status;
public int Status
{
get { return _Status; }
set { _Status = value; }
}
但是,这应该会导致在 getter 中生成内存屏障。
关于.net - 属性 setter 中 Interlocked.Exchange 的简写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202615/