.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 这个声明是否有任何简写形式. 要明白速记的含义是什么.我举个例子: 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中生成内存屏障. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |