C#线程并发执行的实例[转]
2015-10-19 10:59
603 查看
实现思路:线程执行后进行阻塞,判断当前标记是否达到设置的并发数,如果未达到上限,执行队列中将继续增加线程;如已达到其余线程排队等候。
实例代码:
注:其中用到Mutex与Interlocked两个与线程相关的类,需要加上 using System.Threading; 引用Threading命名空间。
实例代码:
注:其中用到Mutex与Interlocked两个与线程相关的类,需要加上 using System.Threading; 引用Threading命名空间。
public class MutexTest { private static int poolFlag = 0; //声明标记 private const int amountThread = 10;//线程总量 private const int maxThread = 3;//可执行线程最大数量 private static Mutex muxConsole = new Mutex(); public static void Main() { for (int i = 0; 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); //标记+1 if (poolFlag < maxThread) //判断是否达到线程上限 muxConsole.ReleaseMutex(); //释放队列锁,加入执行线程 Console.WriteLine("{0} 正在运行......\n", Thread.CurrentThread.Name); Thread.Sleep(3000); //模拟执行,暂停3秒钟 Console.WriteLine("{0} 已经中止......\n", Thread.CurrentThread.Name); Interlocked.Decrement(ref poolFlag); //标记-1 try { muxConsole.ReleaseMutex(); //释放阻塞 } catch { } } }
相关文章推荐
- C# 可否对内存进行直接的操作?
- c#子线程调用主线程控件
- AX2009 C#客户端通过Web service批量审核工作流(一)
- (原创)c#学习笔记03--变量和表达式04--表达式04--命名空间
- 猴子选大王——CSharp数组
- C#面向对象设计模式纵横谈——3.Abstract Factory 抽象工厂(创建型模式)
- C#读写(OFFICE 2013)excel表格(续)
- (原创)c#学习笔记03--变量和表达式04--表达式03--运算符的优先级
- C#运算符重载和索引器
- (原创)c#学习笔记03--变量和表达式04--表达式02--赋值运算符
- (原创)c#学习笔记03--变量和表达式04--表达式01--数学运算符
- c# 输出一个数组
- c# 窗体编程注意事项
- C# 6.0 (C# vNext) 的新功能:Exception-Handling Improvements
- C#读写(OFFICE 2013)excel表格
- C#中的readonly
- C#学习日记25---匿名方法 与 Func委托 与 lambda表达式
- C#验证类 可验证:邮箱,电话,手机,数字,英文,日期,身份证,邮编,网址,IP (转)
- C#属性
- C#创建COM组件