class Program
{
static readonly ReaderWriterLockSlim locker = new ReaderWriterLockSlim();
const int cycleNum = 10;
static int cnt = 10;
static AutoResetEvent myEvent = new AutoResetEvent(false);
static void Main(string[] args)
{
ThreadPool.SetMinThreads(1, 1);
ThreadPool.SetMaxThreads(5, 5);
for (int i = 1; i <= cycleNum; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(testFun), i.ToString());
}
Console.WriteLine("主线程执行!");
Console.WriteLine("主线程结束!");
myEvent.WaitOne();
Console.WriteLine("线程池终止!");
Console.ReadKey();
}
public static void testFun(object obj)
{
Console.WriteLine(string.Format("{0}:第{1}个线程,cnt={2}", DateTime.Now.ToString(), obj.ToString(), cnt));
locker.EnterWriteLock();
cnt -= 1;
locker.ExitWriteLock();
Thread.Sleep(100);
locker.EnterReadLock();
if (cnt == 0)
{
myEvent.Set();
}
locker.ExitReadLock();
}
}
网友评论