每次操作的多线程平均成本

时间:2016-03-10 10:48:41

标签: c multithreading

我正在学习用c编写多线程程序,我注意到随着我增加给定线程的迭代次数,每次操作的成本都会下降。

例如,如果我有2个线程,并且每个线程都向全局变量添加一个数字,然后减去相同的数字,如果每个线程执行1000次,那么每个操作的成本要比每个线程的成本高得多这1000000次。这是为什么?

static int num_iterations = 1;
int opt_yield=0;

    void add(long long *pointer, long long value) {
        long long sum = *pointer + value;
        if (opt_yield)
            pthread_yield();
        *pointer = sum;
    }


struct arg_struct {
  long long counter;
  long long value;
};



void *aux_add(void *arguments)
{

  struct arg_struct *args = arguments;
  int i=0;
  for (i=0;i<num_iterations;i++)
  {
    args->value = 1;
    add(&args->counter,args->value);
    args->value = -1;
    add(&args->counter,args->value);
  }
}


int main(int argc, char * argv[])
{
  printf("\n\n");
  int num_threads = 2;

  pthread_t t[num_threads];


struct arg_struct args;
args.counter = 0;



int count=0;
for(count=0;count<num_threads;count++)
{
  if( pthread_create(&threads[count],NULL,&aux_add, (void *) &args) !=0)
    exit();
}



for(count=0;count<num_threads;count++)
{
  pthread_join(threads[count], NULL);
}


  return 0;
}

1 个答案:

答案 0 :(得分:3)

仅仅因为线程的创建销毁不是免费的 - 它需要操作系统的开销。线程消耗实际工作的时间越多,开销(不变)与整体运行时间的关系就越小。