RosettaCodeData/Task/Dining-philosophers/Visual-Basic-.NET/dining-philosophers-5.vb

42 lines
1.2 KiB
VB.net

Class SelflessPhilosopher
Inherits PhilosopherBase
Public Sub New(ByVal name As String, ByVal right As Fork, ByVal left As Fork)
MyBase.New(name, right, left)
End Sub
Public Overrides Sub MainLoop()
Do
Console.WriteLine(Name & " sat down")
Dim needDelay = False
TryAgain:
If needDelay Then Thread.Sleep(rnd.Next(0, 10000))
Try
Monitor.Enter(m_Left)
Console.WriteLine(Name & " picked up fork " & m_Left.Number)
If Monitor.TryEnter(m_Right) Then
Console.WriteLine(Name & " picked up fork " & m_Right.Number)
Console.WriteLine(Name & " ate!!!!!!")
Console.WriteLine(Name & " put down fork " & m_Right.Number)
Monitor.Exit(m_Right)
Else
Console.WriteLine(Name & " is going to wait")
needDelay = True
GoTo TryAgain
End If
Finally
Console.WriteLine(Name & " put down fork " & m_Left.Number)
End Try
Console.WriteLine(Name & " stood up")
Thread.Sleep(rnd.Next(0, 10000))
Loop Until m_Disposed
End Sub
End Class