当前位置 : 主页 > 编程语言 > c语言 >

.net – 属性设置器中Interlocked.Exchange的简写

来源:互联网 收集:自由互联 发布时间:2021-06-24
我有一个简单的变量声明,一个由反编译器生成的类 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,
我有一个简单的变量声明,一个由反编译器生成的类

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

这个声明是否有任何简写形式.
实际上,这是在类内部使用的backgroundworker,并由另一个类在外部访问.

要明白速记的含义是什么.我举个例子:
以下gode是速记

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中生成内存屏障.

网友评论