static class MyParallel
{ //4.0及以上用Task, Task的背后的实现也是使用了线程池线程
//static List<Task> tasks = new List<Task>(); //4.0以下用Thread
static List<Thread> tasks = new List<Thread>(); //队列
static Queue<int[]> datas = new Queue<int[]>();

public static void For(int start, int end, Action<int> action)
{
//逻辑处理器数量
var taskAllCount = Environment.ProcessorCount*2; #region 每次处理的量
int pageSize = end / taskAllCount;
if (pageSize == 0)
{
pageSize = 1;
}
#endregion #region 分配处理范围 var totalCount = end;
for (int pageIndex = 0; totalCount >= 0; pageIndex++)
{
int pageStart = pageIndex * pageSize;
int pageEnd = pageIndex * pageSize + pageSize; datas.Enqueue(new int[] { pageStart, pageEnd }); //入队
totalCount -= pageSize;
} #endregion #region 根据逻辑处理器数量创建任务,并启动 int i = 0;
while (tasks.Count < taskAllCount)
{
tasks.Add(new Thread(() =>
{
while (datas.Count > 0)
{
var one = new int[] { end, end }; lock (datas)
{
one = datas.Dequeue();
}
for (int j = one.First(); j < end && j < one.Last(); j++)
{
action(j);
} System.Threading.Thread.Sleep(10);
}
}));
tasks[i].IsBackground = true;
tasks[i].Start();
i++;
}
#endregion //等待所有任务结束
foreach (var task in tasks)
{
task.Join();
task.Abort();
}
tasks.Clear();
//Task.WaitAll(tasks.ToArray());
}
}

最新文章

  1. Visual SVN 5.01 Po jie 笔记
  2. 前端:js
  3. 生活中的MVC模式,一个吃货的理解。
  4. xib自定义cell代码规范
  5. HDU1001 关于累加公式的隐性类型转换
  6. windwos异地备份Mysql数据库
  7. SharePoint 2010 &quot;客户端不支持使用windows资源管理器打开此列表&quot; 解决方法
  8. sqlsever 关于索引
  9. BZOJ 2933([Poi1999]地图-区间Dp)
  10. cocos2dx Hello world 创建
  11. hdoj 2222
  12. 从jvm的角度来看java的多线程
  13. 代理(Proxy)模式
  14. 【AtCoder】AISing Programming Contest 2019
  15. 根据进程ID查找运行程序目录
  16. 最重要的7个Drupal内核模板文件
  17. Sum Problem
  18. Rx.net 例子&mdash;&mdash;(1)基础
  19. 一个 Map 函数、一个 Reduce 函数和一个 main 函数
  20. [BZOJ2733]永无乡

热门文章

  1. 使用.NET 6开发TodoList应用(4)——引入数据存储
  2. java 编程基础:【注解】 提取注解信息,利用自定义注解编写测试类,注解绑定事件
  3. java 数据类型String 【正则表达式】匹配
  4. 【LeetCode】799. Champagne Tower 解题报告(Python)
  5. 【LeetCode】778. Swim in Rising Water 水位上升的泳池中游泳(Python)
  6. 【LeetCode】413. Arithmetic Slices 等差数列划分
  7. 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)
  8. 1326 - Race
  9. 从零搭建react hooks项目(github有源代码)
  10. ZOJ 3960:What Kind of Friends Are You?