首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

多线程不能增多任务的并行性

2012-08-08 
多线程不能增加任务的并行性#includestdio.h#includetime.h#includepthread.hvoid func1()void fun

多线程不能增加任务的并行性
#include<stdio.h>
#include<time.h>
#include<pthread.h>

void func1();
void func2();
void func3();

int main(void)
{
  pthread_t thread1,thread2;
  time_t t1,t2;
  time(&t1);
  func1();
  time(&t2);
  printf("func1 costs %d seconds\n",(int)(t2 - t1));
  time(&t1);
  func2();
  func3();
  time(&t2);
  printf("func2&func3 cost %d seconds\n",(int)(t2 - t1));
  pthread_create(&thread1,NULL,(void *)(*func1),NULL);
  pthread_create(&thread2,NULL,(void *)(*func2),NULL);
  time(&t1);
  pthread_join(thread1,NULL);
  pthread_join(thread2,NULL);
  time(&t2);
  printf("2 threads cost %d seconds\n",(int)(t2 - t1));
  return 0;
}

void func1() 
{
  int i,j,k,l;
for(i = 0;i < 1500;i++)
  {  
  for(j = 0;j < 110;j++)
  {  
  for(k = 0;k < 160;k++)
  {  
  for(l = 0;l < 130;l++)
  ;  
  }  
  }  
  }  
}
void func2() 
{
  int i,j,k,l;
for(i = 0;i < 750;i++)
  {
  for(j = 0;j < 110;j++)
  {
  for(k = 0;k < 160;k++)
  {
  for(l = 0;l < 130;l++)
  ;
  }
  }
  }
}

void func3()
{
  int i,j,k,l;
  for(i = 750;i < 1500;i++)
  {
  for(j = 0;j < 110;j++)
  {
  for(k = 0;k < 160;k++)
  {
  for(l = 0;l < 130;l++)
  ;
  }

  }
  }
}
有一个大任务,func1,想把这个任务拆成func2和func3两个子任务用两个线程并行,希望缩短计算时间,可测试结果是计算时间并没有缩短,甚至时间还稍微更长些,请问这是为什么,是我多线程用错了吗?我的机器是双核cpu。


[解决办法]
线程建立销毁也需要时间啊
所以不是必须多线程的或者负载本来就不高的不需要使用多线程,用了反而慢

负载至少远远高于线程本身的调用时间才值得去用
[解决办法]

探讨

线程建立销毁也需要时间啊
所以不是必须多线程的或者负载本来就不高的不需要使用多线程,用了反而慢

负载至少远远高于线程本身的调用时间才值得去用

[解决办法]
原因很简单因为你第一个线程错了调用了func1
[解决办法]
这个需要看具体的情况。比如对于计算密集型的问题,机器只有一个CPU(core),多线程是会降低效率滴。

热点排行