博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程池设置最多M线程执行N个任务
阅读量:6863 次
发布时间:2019-06-26

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

转载地址:http://www.ithao123.cn/content-4805192.html

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 多线程池试验{    class Program    {        public static void Main()        {            //新建ManualResetEvent对象并且初始化为无信号状态            ManualResetEvent eventX = new ManualResetEvent(false);            ThreadPool.SetMaxThreads(3, 3);            thr t = new thr(15, eventX);            for (int i = 0; i < 15; i++)            {                ThreadPool.QueueUserWorkItem(new WaitCallback(t.ThreadProc), i);            }            //等待事件的完成,即线程调用ManualResetEvent.Set()方法            //eventX.WaitOne  阻止当前线程,直到当前 WaitHandle 收到信号为止。             eventX.WaitOne(Timeout.Infinite, true);            Console.WriteLine("断点测试");            Thread.Sleep(10000);            Console.WriteLine("运行结束");        }         public class thr        {            public thr(int count,ManualResetEvent mre)            {                iMaxCount = count;                eventX = mre;            }             public static int iCount = 0;            public static int iMaxCount = 0;            public ManualResetEvent eventX;            public void ThreadProc(object i)            {                Console.WriteLine("Thread[" + i.ToString() + "]");                Thread.Sleep(2000);                //Interlocked.Increment()操作是一个原子操作,作用是:iCount++ 具体请看下面说明                 //原子操作,就是不能被更高等级中断抢夺优先的操作。你既然提这个问题,我就说深一点。                //由于操作系统大部分时间处于开中断状态,                //所以,一个程序在执行的时候可能被优先级更高的线程中断。                //而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。                //就是不能被中断的操作。                Interlocked.Increment(ref iCount);                if (iCount == iMaxCount)                {                    Console.WriteLine("发出结束信号!");                    //将事件状态设置为终止状态,允许一个或多个等待线程继续。                    eventX.Set();                }            }        }    }}

  

 

转载地址:http://www.ithao123.cn/content-4805192.html

转载于:https://www.cnblogs.com/jeffqing/p/7257045.html

你可能感兴趣的文章
学习extjs的布局
查看>>
java-swing模拟实现时钟效果
查看>>
java points[复习]
查看>>
在另一个线程中无法用((CMainFrame *)AfxGetMainWnd())
查看>>
Ignatius and the Princess IV
查看>>
BC#50 1003 The mook jong
查看>>
DEDECMS中,自增长标签
查看>>
JS学习之动态加载script和style样式
查看>>
python快速入门——进入数据挖掘你该有的基础知识
查看>>
42 windows_42_Thread_WaitableTimer 线程 - 等候线程
查看>>
通过xml将传入的字符串转成表格列值
查看>>
优秀安卓开发周刊推荐——My favorite
查看>>
关于centos6上用yum安装mysql后,出现的ERROR 2002 (HY000)的解决办法
查看>>
当在浏览器中输入一个url后回车,后台发生了什么?比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢?...
查看>>
人事管理系统——数据库操作类
查看>>
Bootstrap
查看>>
uva 1339
查看>>
solr之环境配置一
查看>>
wordpress 系列之 header 导航
查看>>
学习中的问题
查看>>