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。