我正在学习用 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/