42 lines
1.2 KiB
VB.net
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
|