私はVBでマルチスレッドコンソールアプリケーションを実行しようとしていますが、スレッドのクロスオーバーが発生しています。基本的には5つのスレッドを実行し、キューに連続してアクセスし、処理し、何も残らないまで繰り返す必要があります。すべてのスレッドが処理されたら、私はそれらに何か他のことをしたい。私は複数のスレッドがアクセスするのを防ぐためにSyncLockを使用しようとしていますが、動作していないようです。どんな助けもありがとう!VB.Netのスレッドセーフ
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
この解決策は、スレッドセーフではありますが、*すべてのスレッドが有効な作業を実行するために並行して待機する必要があるため、すべての並列処理を削除する代わりに... –