我正在学习用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;
}
答案 0 :(得分:3)
仅仅因为线程的创建和销毁不是免费的 - 它需要操作系统的开销。线程消耗实际工作的时间越多,开销(不变)与整体运行时间的关系就越小。