/// <summary>
/// 模拟学生作笔记,假设一个学生只有同时拥有笔记本和笔才能学习,
/// 这里模拟2个学生,但只有1个笔记本和一只笔
/// 如果想进行学习,需同时获得笔记本和笔,当A同学获得笔记本时,
/// B也已获得笔,此时,A试图获得B的笔,而B试图获得A的笔记本,
/// 此时便发生死锁
/// </summary>
using
System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace ThreadTest
{
/// <summary>
/// 模拟学生作笔记,假设一个学生只有同时拥有笔记本和笔才能学习,
/// 这里模拟2个学生,但只有1个笔记本和一只笔
/// 如果想进行学习,需同时获得笔记本和笔,当A同学获得笔记本时,
/// B也已获得笔,此时,A试图获得B的笔,而B试图获得A的笔记本,
/// 此时便发生死锁
/// </summary>
class Program
{
static void Main( string [] args)
{
Tool t1 = new Tool( " Book " ); // 笔记本
Tool t2 = new Tool( " Pen " ); // 笔
Student a = new Student( " A " ,t1,t2); // A学生
Student b = new Student( " B " ,t2,t1); // B学生
Thread ta = new Thread( new ThreadStart(a.Run));
Thread tb = new Thread( new ThreadStart(b.Run));
ta.Start();
tb.Start();
}
}
public class Tool
{
public string Name;
public Tool( string Name)
{
this .Name = Name;
}
}
class Student
{
private string Name;
private Tool Tool1;
private Tool Tool2;
public Student( string Name,Tool tool1,Tool tool2)
{
this .Name = Name;
this .Tool1 = tool1;
this .Tool2 = tool2;
}
public void Run()
{
while ( true )
Study();
}
private void Study()
{
lock (Tool1) // 得到并锁住工具1
{
Console.WriteLine( " {0} get {1} " , Name,Tool1.Name);
lock (Tool2) // 得到并锁住工具2
{
Console.WriteLine( " {0} get {1} " , Name, Tool2.Name);
Console.WriteLine( " {0} Will Study " , Name); // 得到工具并学习
Console.WriteLine( " {0} Dorp {1} " , Name, Tool1.Name); // 释放工具1
}
Console.WriteLine( " {0} Dorp {1} " , Name, Tool2.Name); // 释放工具2
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace ThreadTest
{
/// <summary>
/// 模拟学生作笔记,假设一个学生只有同时拥有笔记本和笔才能学习,
/// 这里模拟2个学生,但只有1个笔记本和一只笔
/// 如果想进行学习,需同时获得笔记本和笔,当A同学获得笔记本时,
/// B也已获得笔,此时,A试图获得B的笔,而B试图获得A的笔记本,
/// 此时便发生死锁
/// </summary>
class Program
{
static void Main( string [] args)
{
Tool t1 = new Tool( " Book " ); // 笔记本
Tool t2 = new Tool( " Pen " ); // 笔
Student a = new Student( " A " ,t1,t2); // A学生
Student b = new Student( " B " ,t2,t1); // B学生
Thread ta = new Thread( new ThreadStart(a.Run));
Thread tb = new Thread( new ThreadStart(b.Run));
ta.Start();
tb.Start();
}
}
public class Tool
{
public string Name;
public Tool( string Name)
{
this .Name = Name;
}
}
class Student
{
private string Name;
private Tool Tool1;
private Tool Tool2;
public Student( string Name,Tool tool1,Tool tool2)
{
this .Name = Name;
this .Tool1 = tool1;
this .Tool2 = tool2;
}
public void Run()
{
while ( true )
Study();
}
private void Study()
{
lock (Tool1) // 得到并锁住工具1
{
Console.WriteLine( " {0} get {1} " , Name,Tool1.Name);
lock (Tool2) // 得到并锁住工具2
{
Console.WriteLine( " {0} get {1} " , Name, Tool2.Name);
Console.WriteLine( " {0} Will Study " , Name); // 得到工具并学习
Console.WriteLine( " {0} Dorp {1} " , Name, Tool1.Name); // 释放工具1
}
Console.WriteLine( " {0} Dorp {1} " , Name, Tool2.Name); // 释放工具2
}
}
}
}
运行结果:
--------------------------------
A get Book
B get Pen
--------------------------------