Imports System
Imports System.Threading
Public Class MainClass
Shared Sub Main()
' create shared object used by threads
Dim holdInteger As New UnsynchronizedIntegerBuffer()
' Random object used by each thread
Dim randomObject As New Random()
' create Producer and Consumer objects
Dim producer As New CProducer(holdInteger, randomObject)
Dim consumer As New CConsumer(holdInteger, randomObject)
' create threads for producer and consumer
' set delegates for each thread
Dim producerThread As New Thread(AddressOf producer.Produce)
Dim consumerThread As New Thread(AddressOf consumer.Consume)
' name each thread
producerThread.Name = "Producer"
consumerThread.Name = "Consumer"
' start each thread
producerThread.Start()
consumerThread.Start()
End Sub ' Main
End Class
' Produces integers from 1 to 4 and places them in unsynchronized buffer.
Public Class CProducer
Private sharedLocation As UnsynchronizedIntegerBuffer
Private randomSleepTime As Random
Public Sub New(ByVal sharedObject As _
UnsynchronizedIntegerBuffer, ByVal randomObject As Random)
sharedLocation = sharedObject
randomSleepTime = randomObject
End Sub
Public Sub Produce()
Dim count As Integer
For count = 1 To 4
Thread.Sleep(randomSleepTime.Next(3000))
sharedLocation.Buffer = count
Next
Console.WriteLine(Thread.CurrentThread.Name & _
" done producing." & vbCrLf & "Terminating " & _
Thread.CurrentThread.Name & ".")
End Sub
End Class
' Consumes 4 integers from unsynchronized buffer.
Public Class CConsumer
Private sharedLocation As UnsynchronizedIntegerBuffer
Private randomSleepTime As Random
Public Sub New(ByVal sharedObject As _
UnsynchronizedIntegerBuffer, ByVal randomObject As Random)
sharedLocation = sharedObject
randomSleepTime = randomObject
End Sub ' New
Public Sub Consume()
Dim count, sum As Integer
For count = 1 To 4
Thread.Sleep(randomSleepTime.Next(3000))
sum += sharedLocation.Buffer
Next
Console.WriteLine(Thread.CurrentThread.Name & _
" read values totaling: " & sum & "." & vbCrLf & _
"Terminating " & Thread.CurrentThread.Name & ".")
End Sub ' Consume
End Class
' Definition of a shared integer without synchronization mechanisms.
Public Class UnsynchronizedIntegerBuffer
Private mBuffer As Integer = -1
Property Buffer() As Integer
Get
Console.WriteLine(Thread.CurrentThread.Name & _
" reads " & mBuffer)
Return mBuffer
End Get
Set(ByVal Value As Integer)
Console.WriteLine(Thread.CurrentThread.Name & _
" writes " & Value)
mBuffer = Value
End Set
End Property ' Buffer
End Class
|