日期:2014-05-18 浏览次数:20958 次
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); } } }