Producer and consumer with SyncLock : SyncLock « Thread « VB.Net Tutorial






Imports System.Threading

Module Module1

    Public Buffer As Integer
    Public BufferEmpty As Boolean = True
    Public ProducerConsumerLock As Object = New Object()

    Sub Producer()
        Dim Value As Integer = 0
        Do
            SyncLock ProducerConsumerLock
                If (BufferEmpty) Then
                    BufferEmpty = False
                    Buffer = Value

                    If (Value = 0) Then
                        Value = 1
                    Else
                        Value = 0
                    End If

                    Console.WriteLine("Producer: " & Buffer)

                End If

            End SyncLock

        Loop While (True)

    End Sub

    Sub Consumer()

        Dim Value As Integer

        Do
            SyncLock ProducerConsumerLock

                If (Not BufferEmpty) Then
                    BufferEmpty = True
                    Thread.CurrentThread.Sleep(1000)

                    Value = Buffer
                    Console.WriteLine("Consumer: " & Value)

                End If
            End SyncLock
        Loop While (True)

    End Sub

    Sub Main()
        Dim ProducerThread As Thread = New Thread(AddressOf Producer)
        Dim ConsumerThread As Thread = New Thread(AddressOf Consumer)

        ProducerThread.Start()
        ConsumerThread.Start()
    End Sub

End Module
Producer: 0
Consumer: 0
Producer: 1
^CTerminate batch job (Y/N)? n








23.8.SyncLock
23.8.1.SyncLock
23.8.2.Producer and consumer with SyncLock
23.8.3.Use SyncLock for shared resources
23.8.4.SyncLock block