我知道你可以获得像这样的锁实例成员:
SyncLock [Object]
[Object].mutate()
End SyncLock
但你如何锁定静态字段?
(例如,使[Object's Class].[static field] = [new value]
线程安全)
我无法在线找到VB的任何内容。
该字段是基本类型。
答案 0 :(得分:3)
只要对象是引用类型,您就可以简单地锁定该对象:
SyncLock [Class].[Object]
' … edit object
End SyncLock
根据您的情况,这可能是正确的做法。但是,请注意,理想情况下,这应该只在私有对象上完成,在类中。否则,您无法保证每个客户端都能正确锁定对象。
此字段是否为基本类型在此处并不重要,除了大多数基本类型是值类型,并且您无法锁定它们。因此,假设您的类型是值类型,您必须使用单独的锁定对象,如注释中所述:
Private Shared ReadOnly LockObj As New Object()
但是,澄清一下,锁定LockObj
会使不神奇地锁定其他类。它只提供了一个用于锁定的协议,只要每个访问字段的线程都遵守这个协议,你就是安全的。这是一个例子:
Class Foo
Private Shared ReadOnly LockObj As New Object()
Private Shared MyValue As Integer = 1
Public Shared Sub UpdateValue()
SyncLock LockObj
MyValue += 1
End SyncLock
End Sub
Public Shared Function ReadValue() As Integer
SyncLock LockObj
Return MyValue
End SyncLock
End Function
End Class
只要每个帖子仅使用UpdateValue
和ReadValue
来访问MyValue
,就可以避免竞争条件。