博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#之线程池优先级
阅读量:4636 次
发布时间:2019-06-09

本文共 4029 字,大约阅读时间需要 13 分钟。

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
l = new List
(); 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) { } }}

  

 

转载于:https://www.cnblogs.com/mengluo/p/5592918.html

你可能感兴趣的文章
smartupload 上传文件时 把页面编码改成gbk 解决乱码
查看>>
EPS是什么格式
查看>>
input禁止显示历史输入记录
查看>>
Python的数据库操作(Sqlalchemy)
查看>>
2.抽取代码(BaseActivity)
查看>>
My simplified pickit2 clone
查看>>
Redis 入门知识
查看>>
夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
查看>>
转--Android如何在java代码中设置margin
查看>>
反射的所有api
查看>>
Js 判断网页窗口是否滚动到底部
查看>>
上传文件
查看>>
css 定位及遮罩层小技巧
查看>>
用java向mysql数据库中插入数据为空
查看>>
项目中非常有用并且常见的ES6语法
查看>>
dateTimePicker编辑状态下,取值不正确的问题
查看>>
mac 端口转发方案
查看>>
[2017.02.23] Java8 函数式编程
查看>>
loadrunner支持https协议的操作方法-经验总结
查看>>
30 个 php 操作 redis 常用方法代码例子
查看>>