VB.Net/Thread/Thread Wait

Материал из VB Эксперт
Версия от 12:45, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Thread Wait and PulseAll

Imports System
Imports System.Threading
Public Class MainClass
  Private Money As Integer
  Private Week As Integer = 1
  
  Public Shared Sub Main()
    Dim mClass As MainClass  =  New MainClass() 
  
    Dim aThreadStart As New ThreadStart(AddressOf mClass.Produce)
    Dim bThreadStart As New ThreadStart(AddressOf mClass.Consume)
    Dim aThread As New Thread(aThreadStart)
    Dim bThread As New Thread(bThreadStart)
    aThread.Name = "Produce"
    aThread.Start()
    bThread.Name = "Consume"
    bThread.Start()
  End Sub
  
  Public Sub Produce()
    Thread.Sleep(500)
    Do
      Monitor.Enter(me)
      Do While Money > 0
        Monitor.Wait(Me)
      Loop
      Money = 1000
      Monitor.PulseAll(Me)
      Monitor.Exit(Me)
    Loop
  End Sub
  Public Sub Consume()
    Console.WriteLine("AM in consume thread")
    Do
      Monitor.Enter(Me)
      Do While Money = 0
        Monitor.Wait(Me)
      Loop
      Console.WriteLine("Dear parent I just spent all your money in week " & Week)
      Week += 1
      If Week = 21 * 52 Then System.Environment.Exit(0)
      Money = 0
      Monitor.PulseAll(Me)
      Monitor.Exit(Me)
    Loop
  End Sub
End Class