我是线程新手,我遇到了一个自定义线程池实现示例blog http://ferruh.mavituna.com/net-multithreading-ve-basit-bir-threadpool-implementasyonu-oku/。我只粘贴代码的必要部分:
Public Class ThreadPool
Private CountLock As New Object
Private _Count As Integer
Public ReadOnly Property ThreadCount() As Integer
Get
SyncLock CountLock
Return _Count
End SyncLock
End Get
End Property
Public Sub Open()
Interlocked.Increment(_Count)
End Sub
Public Sub Close()
Interlocked.Decrement(_Count)
....
End Sub
EndClass
我的问题是,为什么我们需要一个锁来实现只读 ThreadCount 属性?
这段代码应该使用互锁.比较交换 http://msdn.microsoft.com/en-us/library/801kt583.aspx访问属性 getter 中的值。设置参数3(比较对象)到你知道在变量中看不到的东西,比如Int32.MinValue
,然后该函数仅返回当前值_count
.
If Interlocked
操作用于对变量的所有访问,锁是多余的,因为所有访问都通过Interlocked
类方法是原子的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)