マルチスレッドでの排他制御の説明

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