C# Monitor 使用 多线程通信

代码
using System;
using System.Text;
using System.Threading;


namespace ReadKey
{
class Program3
{
static void Main(string[] args)
{
Student student
= new Student();
new Thread(new ThreadStart(new Thread1(student).run)).Start();//添加信息
new Thread(new ThreadStart(new Thread2(student).run)).Start();//读取信息
}
}

/// <summary>
/// 向Student类加添加信息
/// </summary>
public class Thread1
{
private Student student;
public Thread1(Student student)
{
this.student = student;
}
public void run()
{
int i = 0;
while (true)
{
if (i == 0)
student.Add(
"jxncwzb", 23);
else
student.Add(
"jxncwzb++", 22);
i
= (i + 1) % 2;
}
}
}

/// <summary>
/// 读取Thread1干才添加的信息
/// </summary>
public class Thread2
{
private Student student;
public Thread2(Student student)
{
this.student = student;
}
public void run()
{
while (true)
{
student.GetInfo();
}
}
}

public class Student
{
private string name;
private int age;
private bool isRun = false;

public void Add(string name, int age)
{
Monitor.Enter(
this);
if (isRun)
Monitor.Wait(
this);
this.name = name;
//Thread.Sleep(10);
this.age = age;
this.isRun = true;
Monitor.Pulse(
this);
Monitor.Exit(
this);
}

public void GetInfo()
{
Monitor.Enter(
this);
if (!isRun)
Monitor.Wait(
this);
Console.Write(
"姓名:" + name);
Console.WriteLine(
"&年龄:" + age.ToString());
this.isRun = false;
Monitor.Pulse(
this);
Monitor.Exit(
this);
}

}
}

 

posted @ 2010-03-11 10:39  chunchill  阅读(448)  评论(0编辑  收藏  举报