Mega Code Archive

 
Categories / VB.Net Tutorial / Thread
 

Producer and consumer with SyncLock

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