日期:2014-05-18  浏览次数:20804 次

c#线程
想学习线程,看了网上一个例子,里面是两个线程的(tt、bb)我想试着弄是三个线程,结果出现的结果不是我想的
(妈妈已经做好第0道菜了
  我正在偷吃第0道菜了
  爸爸在旁边看了我0次
妈妈已经做好第1道菜了
  我正在偷吃第1道菜了
  爸爸在旁边看了我1次
妈妈已经做好第1道菜了
  我正在偷吃第1道菜了
  爸爸在旁边看了我1次
……
  )
但是两个线程就没事,这是为什么呢?
(妈妈已经做好第0道菜了
  我正在偷吃第0道菜了
妈妈已经做好第1道菜了
  我正在偷吃第1道菜了
妈妈已经做好第1道菜了
  我正在偷吃第1道菜了
……)
class Program
  {
  private static object obj = new object();
  static void Main(string[] args)
  {
  Thread tt = new Thread(delegate()
  {
  for (int i = 0; i < 10; i++)
  {
  try
  {
  Monitor.Enter(obj);
  Console.WriteLine("妈妈已经做好第{0}道菜了", i);
  Monitor.Pulse(obj);
  Monitor.Wait(obj);
  }
  finally
  {
  Monitor.Exit(obj);
  }
  }
  });
  Thread bb = new Thread(delegate()
  {
  for (int i = 0; i < 10; i++)
  {
  try
  {
  Monitor.Enter(obj);
  Console.WriteLine("我正在偷吃第{0}道菜了", i);
  Monitor.Pulse(obj);
  Monitor.Wait(obj);
  }
  finally
  {
  Monitor.Exit(obj);
  }
  }
  });
  Thread ff = new Thread(delegate()
  {
  for (int i = 0; i < 10; i++)
  {
  try
  {
  Monitor.Enter(obj);
  Console.WriteLine("爸爸在旁边看了我{0}次", i);
  Monitor.Pulse(obj);
  Monitor.Wait(obj);
  }
  finally
  {
  Monitor.Exit(obj);
  }
  }
  });
  tt.Start();
  bb.Start();
  ff.Start();
  Console.Read();
  }
  }

------解决方案--------------------
线程的启动是无序的,所以输出结果有序的是 妈妈做菜1~10; 我偷吃1~10;爸爸偷看1~10;
而这三个输出顺序不一定。尽管你用了monitor。