加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:16:34 所属栏目:百科 来源:网络整理
导读:我有一个简单的变量声明,一个由反编译器生成的类 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 Pr
我有一个简单的变量声明,一个由反编译器生成的类

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读