要求1.封装成类来分配num,2.monitor这个地方要换种用法,(因为如果上面break退出了,下面就没有了,所以要换种写法)
如下代码:
using System;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
int num = 0, maxnum = 100;
void outNumber(object index)
{
while (true)
{
Monitor.Enter(this);
if (num >= maxnum) break;
num++;
Console.WriteLine("线程" + index + ":" + num);
Monitor.Exit(this);
}
}
static void Main(string[] args)
{
var p = new Program();
var pools = new Thread[4];
for (var i = 0; i < 4; i++)
{
pools[i] = new Thread(p.outNumber);
}
for (var i = 0; i < 4; i++)
{
pools[i].Start(i);
}
Console.ReadKey();
}
}
}
加if判断就是防止越界超过maxnum用的,超过了就结束循环(退出线程),如果要释放锁,可以在break前释放,防止还继续占用着
封装成类不太明白什么意思,其实已经是类了,名称为class Program,Main只是放到了Program类里面,线程运行的代码是Program类的实例方法。
void outNumber(object index)
{
while (true)
{
Monitor.Enter(this);
if (num >= maxnum)
{
Monitor.Exit(this);///////
break;
}
num++;
Console.WriteLine("线程" + index + ":" + num);
Monitor.Exit(this);
}
}