.net - 属性 setter 中 Interlocked.Exchange 的简写

标签 .net vb.net decompiling decompiler shorthand

我有以下简单的变量声明,是由反编译器生成的类

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/

相关文章:

vb.net - 在 VS 2010 中的窗体之间传递变量

javascript - 奇怪的 jQuery 文本框问题

java - 字节码序列反编译

Java调试没有行号属性的反编译类

c# - WinForms Designer 和 TableLayoutPanel SmartTag 自定义

.net 多线程

.net - 使用 log4net 进行日志记录的最佳实践是什么?

.net - MS 研究国际象棋的替代方案?

c# - Visual Studio 改变了 Ctrl-K-D 的工作方式

c++ - Hex-rays、MATLAB、MEX、转换 uintptr_t 失败