日期:2014-05-20 浏览次数:20983 次
using System; using System.Threading; class Program { static void Main(string[] args) { ManualResetEvent[] MREs = new ManualResetEvent[3]; int i; for (i = 0;i < 3;i++) { MREs[i] = new ManualResetEvent(false); } for (i = 0;i < 15;i += 5) { ThreadPool.QueueUserWorkItem(state => { int x = (int)state; for (int j = 1;j <= 75;j++) { MREs[x / 5].WaitOne(); if ((((j - 1) % 15) - x < 5) && (((j - 1) % 15) - x >= 0)) Console.WriteLine(j); if (j % 5 == 0) { MREs[x / 5].Reset(); MREs[(x / 5 + 1) % 3].Set(); } } MREs[x / 5].Set(); }, i); } MREs[0].Set(); WaitHandle.WaitAll(MREs); Console.ReadLine(); } }