我正在尝试在VB中运行一个多线程控制台应用程序并且正在进行线程交叉.基本上我想运行5个线程,让它们不断访问队列,处理并重复,直到没有任何东西.当所有线程都已处理完毕后,我希望他们做其他事情.我正在尝试使用SyncLock来防止多个线程访问,但它似乎没有工作.任何帮助,将不胜感激!
Dim iThread As Integer Dim manualEvents(4) As ManualResetEvent Sub Main() For i = 0 To 4 manualEvents(i) = New ManualResetEvent(False) ThreadPool.QueueUserWorkItem(AddressOf DoOne) Next For Each handle As WaitHandle In manualEvents handle.WaitOne() Next ' do other stuff EndSub Private Sub DoOne() Dim lockObject As New Object() SyncLock (lockObject) If QueryQueue.DoOne() Then DoOne() Else manualEvents(iThread).Set() iThread = iThread + 1 End If End SyncLock End Sub
解决方法
问题在于锁定资源,您使用lockObject作为同步锁资源,该资源应该是共享的accros线程.
你必须使它成为一个实例字段.
你必须使它成为一个实例字段.
Private Shared lockObject As New Object() Private Sub DoOne() SyncLock (lockObject) If QueryQueue.DoOne() Then DoOne() Else manualEvents(iThread).Set() iThread = iThread + 1 End If End SyncLock End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。