Thread Producer and Consumer
Imports System.Threading Module Module1 Public Buffer As Integer Public BufferEmpty As Boolean = True Public MonitorLock As Object = New Object() Sub Producer() Dim Value As Integer = 0 Do Monitor.Enter(MonitorLock) If (BufferEmpty) Then BufferEmpty = False Buffer = Value If (Value = 0) Then Value = 1 Else Value = 0 End If Console.WriteLine("Producer: " & Buffer) End If Monitor.Exit(MonitorLock) Loop While (True) End Sub Sub Consumer() Dim Value As Integer Do Monitor.Enter(MonitorLock) If (Not BufferEmpty) Then BufferEmpty = True Thread.CurrentThread.Sleep(1000) Value = Buffer Console.WriteLine("Consumer: " & Value) End If Monitor.Exit(MonitorLock) Loop While (True) End Sub Sub Main() Dim ProducerThread As Thread Dim ConsumerThread As Thread ProducerThread = New Thread(AddressOf Producer) ConsumerThread = New Thread(AddressOf Consumer) ProducerThread.Start() ConsumerThread.Start() End Sub End Module
1. | Producer and Consumer with Unsynchronized Integer Buffer | ||
2. | Producer and Consumer with Synchronized Integer Buffer |