c#之线程池优先级

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ManualResetEvent rem = new ManualResetEvent(false);  //设置信号灯为无状态
            ThreadPool.SetMaxThreads(3, 3);
            thr t = new thr(15, rem);
            for (int i = 0; i < 15; i++) 
            {
         
              ThreadPool.QueueUserWorkItem(new WaitCallback(t.met),i);
            }
            rem.WaitOne(Timeout.Infinite, true);
            Console.WriteLine("断点测试");
            Thread.Sleep(10000);
            Console.WriteLine("运行结束");
            Console.ReadKey();
        }

        
    }

    public class thr 
    {
        public thr(int count,ManualResetEvent res) 
        {
            iMaxCount1 = count;
            evens = res;

        }

        public static int icount = 0;
        public static int iMaxCount1 = 0;
        public ManualResetEvent evens;
        public void met(object i)
        {
            Console.WriteLine("thgead[" + i.ToString() + "]");
            Thread.Sleep(2000);
            //Interlocked.Increment()操作是一个原子操作,作用是:iCount++ 具体请看下面说明 
            //原子操作,就是不能被更高等级中断抢夺优先的操作。你既然提这个问题,我就说深一点。
            //由于操作系统大部分时间处于开中断状态,
            //所以,一个程序在执行的时候可能被优先级更高的线程中断。
            //而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。
            //就是不能被中断的操作。
            Interlocked.Increment(ref icount);
            if (icount == iMaxCount1)
            {
                Console.WriteLine("发出结束信号!");
                //将事件状态设置为终止状态,允许一个或多个等待线程继续。
                evens.Set();
            }
        }

       

       
    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ManualResetEvent rem = new ManualResetEvent(false);  //设置信号灯为无状态
            ThreadPool.SetMaxThreads(1, 3);
            for (int i = 0; i < 5; i++)
            {
                thr t = new thr(5, rem);
                ThreadPool.QueueUserWorkItem(new WaitCallback(t.met), i);
            }
            Console.WriteLine("断点测试");
            Thread.Sleep(200000);
            Console.ReadKey();
        }
    }
    public class thr
    {
        public thr(int count, ManualResetEvent res)
        {
            iMaxCount1 = count;
            evens = res;

        }

        public static int icount = 0;
        public static int iMaxCount1 = 0;
        public ManualResetEvent evens;
        public void met(object ss)
        {
            lock (this)
            {
                Thread.Sleep(30);
                Random r = new Random();




                List<int> l = new List<int>();
                for (int j = 0; j < 6; j++)
                {
                    int lable = r.Next(1, 34);
                    if (l.Contains(lable))
                    {
                        j--;
                    }
                    else
                    {
                        l.Add(lable);
                    }
                }

                l.Sort();
                int lan = r.Next(1, 17);
                string zu = l[0].ToString() + " " + l[1].ToString() + " " + l[2].ToString() + " " + l[3].ToString() + " " + l[4].ToString() + " " + l[5].ToString() + "-" + lan;
                Console.WriteLine(zu);


                //Interlocked.Increment()操作是一个原子操作,作用是:iCount++ 具体请看下面说明
                //原子操作,就是不能被更高等级中断抢夺优先的操作。你既然提这个问题,我就说深一点。
                //由于操作系统大部分时间处于开中断状态,
                //所以,一个程序在执行的时候可能被优先级更高的线程中断。
                //而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。
                //就是不能被中断的操作。
                Interlocked.Increment(ref icount);
                if (icount == iMaxCount1)
                {
                    Console.WriteLine("发出结束信号!");
                    //将事件状态设置为终止状态,允许一个或多个等待线程继续。
                    evens.Set();
                }
            }
        }

        public void PlayGame(object ss)
        {


        }






    }
}

  


posted @ 2016-06-17 09:13  尘梦  阅读(1364)  评论(0编辑  收藏  举报