マルチスレッドでの排他制御の説明
以下のサンプルはスレッド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と自分自身のオブジェクトを指定できます。が注意が必要です。