gpt4 book ai didi

c - 为什么使用线程的程序会花费更多的时间?

转载 作者:行者123 更新时间:2023-11-30 17:46:05 25 4
gpt4 key购买 nike

我添加了一个线程来计算第一个数组的 3,同时主进程生成第二个数组。我以为这会让程序更快,但是在 Linux 上使用 time 命令后,带有线程的一个花费了 0m7.627s,另一个花费了 0m5.701s。起初我以为我使用的长度非常小,只是由于线程创建时间的原因它更大,但事实并非如此。时间差与长度成正比...这仅适用于更多线程吗? (也许在不同的例子中)难道我做错了什么?另外我不明白 pthread_join(..., this) 的第二个参数是如何工作的,我尝试了很多不同的方式,但它从来没有工作。我能提供一点帮助就太好了,谢谢。

没有线程:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

#define LENGTH 100000000

void * count3s(void * i){
int numberOf3 = 0;
int * j = (int *) i;
int counter = 0;
for(counter = 0; counter < LENGTH; counter++){
if(*(j+counter) == 3){
numberOf3++;
}
}
*((int *) i) = numberOf3;
return i;
}


int main(int argc, char *argv[]){
pthread_t p0, p1;
int * i = (int *) malloc(sizeof(int)*LENGTH);
int * j = (int *) malloc(sizeof(int)*LENGTH);
int c = 0, d = 0;
srand(0);
for(c=0;c<LENGTH;c++){
*(i+c) = rand() % 4;
}

for(c=0;c<LENGTH;c++){
*(j+c) = rand() % 4;
}

d = *((int *) count3s((void *) i));
c = *((int *) count3s((void *) j));
printf("C:%d, D:%d\n", c, *i);
return 0;
}

带线程:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

#define LENGTH 100000000

void * count3s(void * i){
int numberOf3 = 0;
int * j = (int *) i;
int counter = 0;
for(counter = 0; counter < LENGTH; counter++){
if(*(j+counter) == 3){
numberOf3++;
}
}
*((int *) i) = numberOf3;
return i;
}


int main(int argc, char *argv[]){
pthread_t p0, p1;
int * i = (int *) malloc(sizeof(int)*LENGTH);
int * j = (int *) malloc(sizeof(int)*LENGTH);
int c = 0, d = 0;
srand(0);
for(c=0;c<LENGTH;c++){
*(i+c) = rand() % 4;
}
//thread starts counting 3's
pthread_create(&p0, NULL, count3s,(void *)i); //thread created
for(c=0;c<LENGTH;c++){
*(j+c) = rand() % 4;
}

pthread_join(p0, NULL);
c = *((int *) count3s((void *) j));
printf("C:%d, D:%d\n", c, *i);
return 0;
}

最佳答案

因为创建线程不是免费的

关于c - 为什么使用线程的程序会花费更多的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com