日期:2014-05-18 浏览次数:21153 次
static void Main(string[] args)
{
int order = 0;//, -1 for exit , 0 for initialize
int ordermax = 0;//最大编号
ParameterizedThreadStart threadProc = p =>
{
if (!(p is int)) return;
int myOrder = (int)p;
object sync = new object();
while (true)
{
lock (sync)//同步线程
{
if (order != myOrder)//判断状态机当前状态是否是到自己执行
{
Thread.Sleep(50);//阻塞自己线程50毫秒后继续下一次检测
continue;
}
Console.WriteLine(p);//实际操作
order++;//在lock块中,安全的操作状态
if (order > ordermax) order = 1;//循环状态
}
Thread.Sleep(50);
}
};
new Thread(threadProc).Start(1);//启动1个线程,编号1
new Thread(threadProc).Start(2);//启动1个线程,编号2
new Thread(threadProc).Start(3);//启动1个线程,编号3
new Thread(threadProc).Start(4);//启动1个线程,编号4
ordermax = 4;//最大值4
order = 1;//当前状态1,开始启动
Console.ReadKey();
}
------解决方案--------------------
thread.Join(); 不就可以了么
public const int Repetitions = 10000;
public static void Main()
{
//Thread thread = new Thread(DoWork);
//thread.Start(".");
//thread.Join();
//for (int count = 0; count < Repetitions; count++)
//{
// Console.Write('-');
//}
Thread thread;
for (int i = 0; i < 3; i++)
{
thread = new Thread(DoWork);
if (i == 0)
{
thread.Start(".");
}
else if (i == 1)
{
thread.Start("-");
}
else if (i == 2)
{
thread.Start("*");
}
else {
thread.Start("&");
}
thread.Join();
}
Console.ReadLine();
}
public static void DoWork(object state)
{
for (int count = 0; count < Repetitions; count++)
{
Console.Write(state);
}
}
}