VB.Net中的线程安全
发布时间:2020-12-17 07:24:39 所属栏目:百科 来源:网络整理
导读:我正在尝试在VB中运行一个多线程控制台应用程序并且正在进行线程交叉.基本上我想运行5个线程,让它们不断访问队列,处理并重复,直到没有任何东西.当所有线程都已处理完毕后,我希望他们做其他事情.我正在尝试使用SyncLock来防止多个线程访问,但它似乎没有工作.
我正在尝试在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |