c - 多线程平均每次操作成本

标签 c multithreading

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

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

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;
}

最佳答案

仅仅因为线程的创建销毁不是免费的 - 它需要操作系统的开销。线程实际工作消耗的时间越多,总运行时间的开销(恒定)就越少。

关于c - 多线程平均每次操作成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35914303/

相关文章:

c - 以最少的指令获得最快的整数平方根

c# - 执行多个线程的最有效方法

java - Android 中的线程处理长时间运行的进程

c# - 在线程中执行 Webbrowser 控件的屏幕显示

c - 未使用 gcc 和 makefile 为 #ifdef 定义值

C - 有没有办法用更少的代码写这个?

c++ - 如何在打开 gdb 时添加额外的延迟

java - Java 中如何合并线程?

multithreading - 多个 GPU 中的固定内存

c - 段错误,但找不到位置