如何把for循环拆分为多线程

   在开发过程,我们经常遇到,处理一个大任务需要for循环上百万千万次,任务简单还好,一下子跑完,任务稍微复杂一点,跑一天几天才能有结果,这时候程序就没啥用处了。

    举个简单例子,包工头拉来一车的砖,一个人一只一只的搬,需要一天,若我叫上一百个人,时间就减少一百倍了,叫上两百号人,时间就减少两百倍了。转到代码实现,我把请一个人比作创建一个线程,请十个人就创建十个线程,比如砖上面还有编号(0-9999),一共有10000块砖,请了10个人,那么每人就是1000块,那我创建线程的时候就可以传递参数下去,告诉第一个人,你搬0-999号,告诉第二人,你负责搬1000到1999号,以此类推,十个人任务就分配完。

简单的代码实现如下:


void *Multi_Threads(void * args)
{
  int i=0;
  int index= *(int*)args;
  for(i=index;i<index+(10000/10);i++) // 10000/10 可以用参数传递,这里为了简单就写死
  {
    //do some thing
  }

  return NULL;
}

int main()
{

    pthread_t pid[10];

	int index[10]; //搬砖的起始编号,必须用数组,不能用一个整型,不然创建线程的时候会导致传值错误

    int frequency= 10000/10;  //每人一千

	for(int i=0;i<10;i++)
	{
	   index[i]= fr
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值