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
|