マルチスレッドでの排他制御の説明
以下のサンプルはスレッド1スレッド2よりsに文字を追加するぷろぐらむです。
排他制御はSyncLock~End SyncLockの間になります。
この行をコメントで外すと、まともに追加されません。
Private thread1 As System.Threading.Thread
Private thread2 As System.Threading.Thread
Private thisLock As New Object
Private s As String = ""
Private Sub ThreadMain1()
Dim i As Integer
For i = 0 To 9999
SyncLock thisLock
s = s + "A"
End SyncLock
Next
System.Diagnostics.Debug.WriteLine(" Thread1:" & s.Length.ToString())
End Sub
Private Sub ThreadMain2()
Dim i As Integer
For i = 0 To 9999
SyncLock thisLock
s = s + "B"
End SyncLock
Next
System.Diagnostics.Debug.WriteLine(" Thread2:" & s.Length.ToString())
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
thread1 = New System.Threading.Thread(AddressOf ThreadMain1)
thread2 = New System.Threading.Thread(AddressOf ThreadMain2)
thread1.Start()
thread2.Start()
End Sub
・SyncLockはSystem.Monitorの省略型で、System.Monitorして排他もできます。
・SyncLock はSyncLock Meと自分自身のオブジェクトを指定できます。が注意が必要です。