如何在没有锁定的情况下允许从多个线程同时调用方法,但是在调用其他方法时它将锁定哪个方法?
示例:
Private DataLock As New Object()
Private Function GetInfo() As String
SyncLock DataLock
'Read existing data and return a String
End SyncLock
End Function
Private Sub UpdateData()
SyncLock DataLock
'Update/Change existing Data
End SyncLock
End Sub
如何修改上述代码,以便:
UpdateData()
在调用时始终触发锁定,锁定自身和GetInfo
GetInfo()
不会锁定自身(因此它可以在多个线程上同时运行),但它会锁定UpdateData
直到完成答案 0 :(得分:3)
这是您使用ReaderWriterLockSlim
类发布的代码的直接类比:
Private dataLock As New ReaderWriterLockSlim()
Private Function GetInfo() As String
dataLock.EnterReadLock()
Try
'Read existing data and return a String
Finally
dataLock.ExitReadLock()
End Try
End Function
Private Sub UpdateData()
dataLock.EnterWriteLock()
Try
'Update/Change existing Data
Finally
dataLock.ExitWriteLock()
End Try
End Sub
您可能需要考虑Try
方法,它们允许您指定等待锁定的最长时间。