Vb.net Synclock是锁定对象引用还是锁定对象本身?

Vb.net Synclock是锁定对象引用还是锁定对象本身?,vb.net,multithreading,synclock,Vb.net,Multithreading,Synclock,标题确实说明了这一切,但我提供了一些代码来演示我的要求 Public Class Class1 Private Object1 As New Class2 Private Sub Test1() Dim LocalObject1 As New Class3(Object1) Synclock Object1 'Some code here End Synclock End Sub End Class

标题确实说明了这一切,但我提供了一些代码来演示我的要求

Public Class Class1
    Private Object1 As New Class2
    Private Sub Test1()
        Dim LocalObject1 As New Class3(Object1)
        Synclock Object1
            'Some code here
        End Synclock
    End Sub
End Class
Public Class2
    'Some custom object type
End Class
Public Class Class3
    Private Object2 As Class2
    Public Sub New(ObjectIn As Class3)
        Object2 = ObjectIn
    End Sub
    Public Sub DoSomeWork()
        Synclock Object2
            'Some code here
        End Synclock
    End Sub
End Class

这两个
“这里的一些代码
s是否会同时运行(假设它们在不同的线程上)?

您的代码非常不清楚-尤其是在
Class1
中从未初始化
Object1
。你能展示一个简短但完整的程序来演示这个问题吗?为什么你的构造函数参数
ByRef
,而你从来没有在构造函数中赋值呢?@Jon我已经按照你的建议澄清了代码,希望这能有所帮助。然而,我没有一个完整的程序来演示这个问题,因为没有问题,只有一个问题!我原以为SyncLock的文档中会涉及到这一点,但要么没有涉及,要么我的理解不足,没有涉及到这一点。感谢您帮助我澄清。锁定状态存储在对象中,而不是引用中。这就是为什么你不应该写这样的代码。例如,其他代码可以同步ObjectIn对象并死锁代码。将
Private locker作为新对象写入
@Hans那么,如果我想在类之间协调对Object1的访问,那么正确的方法是什么?如果这应该是它自己的问题,请说,我会很乐意。