<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2FThread%2FThread_DeadLock</id>
		<title>VB.Net/Thread/Thread DeadLock - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2FThread%2FThread_DeadLock"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Thread/Thread_DeadLock&amp;action=history"/>
		<updated>2026-04-05T06:01:31Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/Thread/Thread_DeadLock&amp;diff=888&amp;oldid=prev</id>
		<title> в 16:40, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Thread/Thread_DeadLock&amp;diff=888&amp;oldid=prev"/>
				<updated>2010-05-26T16:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:40, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/Thread/Thread_DeadLock&amp;diff=889&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Thread/Thread_DeadLock&amp;diff=889&amp;oldid=prev"/>
				<updated>2010-05-26T12:45:28Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Thread DeadLock: Philosopher ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;&lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Threading&lt;br /&gt;
Imports System.Text&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
  &lt;br /&gt;
  Public Shared Sub Main()&lt;br /&gt;
    Dim Tom As New Philosopher(&amp;quot;Tom&amp;quot;)&lt;br /&gt;
    Dim Bob As New Philosopher(&amp;quot;Bob&amp;quot;)&lt;br /&gt;
    Dim aThreadStart As New ThreadStart(AddressOf Tom.Eat)&lt;br /&gt;
    Dim aThread As New Thread(aThreadStart)&lt;br /&gt;
    aThread.Name = &amp;quot;Tom&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    Dim bThreadStart As New ThreadStart(AddressOf Bob.Eat)&lt;br /&gt;
    Dim bThread As New Thread(bThreadStart)&lt;br /&gt;
    bThread.Name = &amp;quot;Bob&amp;quot;&lt;br /&gt;
    aThread.Start()&lt;br /&gt;
    bThread.Start()&lt;br /&gt;
  End Sub&lt;br /&gt;
  &lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class Fork&lt;br /&gt;
  Private Shared mForkAvailable As Boolean = True&lt;br /&gt;
  Private Shared OwnerName As String = &amp;quot;Nobody&amp;quot;&lt;br /&gt;
  Public Sub GrabFork(ByVal a As Philosopher)&lt;br /&gt;
    Console.WriteLine(Thread.CurrentThread.Name &amp;amp; &amp;quot; trying to grab the fork.&amp;quot;)&lt;br /&gt;
    Console.WriteLine(Me.OwnerName &amp;amp; &amp;quot; has the fork.&amp;quot;)&lt;br /&gt;
    Monitor.Enter(Me) &amp;quot;SyncLock (aFork) &amp;quot;&lt;br /&gt;
    If mForkAvailable Then&lt;br /&gt;
      a.HasFork = True&lt;br /&gt;
      OwnerName = a.MyName&lt;br /&gt;
      mForkAvailable = False&lt;br /&gt;
      Console.WriteLine(a.MyName &amp;amp; &amp;quot; just got the fork, waiting&amp;quot;)&lt;br /&gt;
      Thread.Sleep(100)&lt;br /&gt;
    End If&lt;br /&gt;
    Monitor.Exit(Me) &amp;quot;End SyncLock&lt;br /&gt;
  End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Public Class Knife&lt;br /&gt;
  Private Shared mKnifeAvailable As Boolean = True&lt;br /&gt;
  Private Shared OwnerName As String = &amp;quot;Nobody&amp;quot;&lt;br /&gt;
  Public Sub GrabKnife(ByVal a As Philosopher)&lt;br /&gt;
    Console.WriteLine(Thread.CurrentThread.Name &amp;amp; &amp;quot; trying to grab the knife.&amp;quot;)&lt;br /&gt;
    Console.WriteLine(Me.OwnerName &amp;amp; &amp;quot; has the knife.&amp;quot;)&lt;br /&gt;
    Monitor.Enter(Me) &amp;quot;SyncLock (aKnife) &amp;quot;&lt;br /&gt;
    If mKnifeAvailable Then&lt;br /&gt;
      mKnifeAvailable = False&lt;br /&gt;
      a.HasKnife = True&lt;br /&gt;
      OwnerName = a.MyName&lt;br /&gt;
      Console.WriteLine(a.MyName &amp;amp; &amp;quot; just got the knife, waiting&amp;quot;)&lt;br /&gt;
      Thread.Sleep(100)&lt;br /&gt;
    End If&lt;br /&gt;
    Monitor.Exit(Me)&lt;br /&gt;
  End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Public Class Philosopher&lt;br /&gt;
  Public MyName As String&lt;br /&gt;
  Private Shared mFork As Fork&lt;br /&gt;
  Private Shared mKnife As Knife&lt;br /&gt;
  Public HasKnife As Boolean&lt;br /&gt;
  Public HasFork As Boolean&lt;br /&gt;
  Shared Sub New()&lt;br /&gt;
    mFork = New Fork()&lt;br /&gt;
    mKnife = New Knife()&lt;br /&gt;
  End Sub&lt;br /&gt;
  Public Sub New(ByVal theName As String)&lt;br /&gt;
    MyName = theName&lt;br /&gt;
  End Sub&lt;br /&gt;
  Public Sub Eat()&lt;br /&gt;
    Do Until Me.HasKnife And Me.HasFork&lt;br /&gt;
      Console.WriteLine(Thread.CurrentThread.Name &amp;amp; &amp;quot; is in the thread.&amp;quot;)&lt;br /&gt;
      If Rnd() &amp;lt; 0.5 Then&lt;br /&gt;
        mFork.GrabFork(Me)&lt;br /&gt;
      Else&lt;br /&gt;
        mKnife.GrabKnife(Me)&lt;br /&gt;
      End If&lt;br /&gt;
    Loop&lt;br /&gt;
    MessageBox.Show(Me.MyName &amp;amp; &amp;quot; can eat!&amp;quot;)&lt;br /&gt;
    mKnife = New Knife()&lt;br /&gt;
    mFork = New Fork()&lt;br /&gt;
  End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>