知识大全 C#线程池的实现
Posted 操作
篇首语:人生处万类,知识最为贤。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#线程池的实现相关的知识,希望对你有一定的参考价值。
C#线程池的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
具体的需求是 在某一时间点 只有N个线程在并发执行 如果有多余的线程 则排队等候~ 还真是费尽心思啊~最终还是被我攻克了 下面我就来说说具体的实现
C#提供了Mutex与Interlocked这两个与线程相关的类 都在Threading命名空间下! Mutex中提供了WiteOne ReleaseMutex 两个实例方法 WiteOne的作用是 阻塞当前线程 提供对该线程的原子操作 也就是说当一个线程遇到WiteOne的时候 如果在WiteOne里面没有线程在操作 则此线程进去操作而里面有线程的时候 所有到此的线程均需要排队等候里面的线程执行完毕而控制这样操作的结束标记就是使用ReleaseMutex 方法!
就好比WiteOne是一把锁一样~而ReleaseMutex 就是一把钥匙 当 个人都看到这个门的时候 第一个到达门口的人会看到屋子里没有人 则他进去 同时会把门锁上后面的人自然要在门口等候 当此人在屋子里执行完任务后他会用钥匙把门打开! 出去后把锁交给门口排队的第二位同志 第二位同志再做同样的操作 如果第一位同志执行完任务以后不把使用权交给第二个人的话 而直接退出 那么屋子自然就空了下来 而门还是锁的~不必担心~门会自动打开 只要是前一个人已经不在屋子里即可~
然后再来说说这个Interlocked 官方说明是 对一个变量进行原子操作进行递增或者递减然后保存 原子操作的概念就是 有且只有一个线程在对此变量进行操作~不准其他线程干预的操作 当对一个变量进行原子操作的时候 此变量就会加锁 而其他线程是无法访问的 只能挂起等候此变量解锁 我感觉实际上使用的也就是Mutex来实现的
好了开始说说具体的实现吧
public class MutexTest
private static int poolFlag = ;//标记
private const int amountThread = ;//线程总量
private const int maxThread = ;//可执行线程最大数量
private static Mutex muxConsole = new Mutex() ;
public static void Main()
for ( int i = ;i <amountThread ;i ++ )
// 创建指定数量的线程
// 是线程调用Run方法
// 启动线程
Thread trd = new Thread( new ThreadStart( Run ) ) ;
trd Name = 线程 + i ;
trd Start() ;
public static void Run()
muxConsole WaitOne(); //阻塞队列
Interlocked Increment(ref poolFlag) ;//标记+
if (poolFlag != maxThread) //判断是否等于上限
muxConsole ReleaseMutex(); //如果此线程达不到可执行线程上限 则继续开通 让后面的线程进来
Console WriteLine( 正在运行 Thread CurrentThread Name ) ;
Thread Sleep( ); //模拟执行
Console WriteLine( 已经中止 Thread CurrentThread Name ) ;
//标记
Interlocked Decrement(ref poolFlag) ;
cha138/Article/program/net/201311/14555
相关参考
构建一个新的线程的代价还是有些高的因为它涉及与操作系统的交互如果你的程序创建了大量生存期很短的线程那就应该使用线程池一个线程池包含大量准备运行的空闲线程你将一个Ru
Java学习:线程池的简单构建 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在服务器端的应用
典型Java线程池的代码及其各部分功能介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ()根
C#定时调用方法(线程) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! //这些是C#线程的思路
C#实现远程线程插入 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用NET可以实现远程线程插
详细讲解C#的多线程能力 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 线程是允许进行并行计算的
C#多线程编程实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 问题的提出 所谓单个写入程序
C#创建多线程应用程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在NET和C#中编写一个多
C#线程同步的方法总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们在编程的时候有时会使用
C#跨线程调用TextBox方法浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n