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