有人可以帮我理解同步锁语句是如何工作的吗?我知道这里还有其他一些关于同步锁的帖子,但我无法很好地理解答案。我正在尝试启动并运行一个简单的多线程示例,但遇到了麻烦。起初我尝试了以下代码。
Public Class Class1
Public list As List(Of Integer) = New List(Of Integer)
Public Sub addInt(ByVal i As Integer)
SyncLock list
list.Add(i)
End SyncLock
End Sub
Public Sub MainLoop()
While list.Count < 50
SyncLock list
For Each i As Integer In list
Debug.WriteLine(i.ToString())
Next
End SyncLock
End While
End Sub
End Class
我有一个带有两个按钮的简单 winform。我使用第一个按钮创建 Class1 的 obj 并在新线程中启动 MainLoop 方法。我使用借调按钮来调用 addInt 方法。但是,该代码可能适用于一两次,然后锁定。在阅读了该表单的其他问题后,我意识到 synclock 语句的 lockobject 并没有像我最初想象的那样工作,它只是一个不应该更改的任意引用对象。我认为 syncLock 语句只是在将处理器控制权传递给新线程之前强制执行整个代码块。所以我尝试使用另一个锁定对象,但现在它只是锁定了。
Public Class Class1
Private padLock As String = "PADLOCK"
Public list As List(Of Integer) = New List(Of Integer)
Public Sub addInt(ByVal i As Integer)
SyncLock padLock
list.Add(i)
End SyncLock
End Sub
Public Sub MainLoop()
While list.Count < 50
SyncLock padLock
For Each i As Integer In list
Debug.WriteLine(i.ToString())
Next
End SyncLock
End While
End Sub
End Class
有人可以解释为什么上面的代码不起作用吗?在类似的帖子中,有人提到 Interlocked 类会很有用,但我不知道它是什么或如何使用它。一个简短的“傻瓜互锁类”解释也将不胜感激。