gpt4 book ai didi

c - 循环内创建线程

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:18 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的程序,我从命令行输入了 n 个 int 元素;在我创建 n 个线程后,参数是 i 位置的数字;在此之后 * 函数打印我放入 pthread_create 中的数字。

int main (int argc, char *argv[]){
pthread_t * tid;
int i=0;
int n;
int *pn = &n;

tid = (pthread_t *) malloc (sizeof(pthread_t)*(argc-1));

for (i=1; i<argc; i++) { //cycle 1
*pn = atoi(argv[i]);
pthread_create(tid+i, NULL, function, (void *) pn);
}
for (i=0; i<argc-1; i++){
pthread_join(tid[i], NULL);
}
return 0;}


void *function(void * param){
int *k = (int *) param;
printf("i got this number: %d\n", *k);
pthread_exit(0);
}

我跑了,我得到了这个:

./test 1 2 3 4
i got this number: 3
i got this number: 3
i got this number: 4
i got this number: 4

输出总是变化,但我从来没有得到正确的数字 (4, 1, 2, 3) 1).有没有办法解决这个问题?

最佳答案

每个线程都传递相同的指针,因此每个线程都在查看相同的变量。结果,您最终陷入竞争状态。

你需要给每个线程传递它自己的变量:

int *n = malloc(argc * sizeof(int));
if (n == NULL) {
perror("malloc failed");
exit(1);
}
for (i=1; i<argc; i++) { //cycle 1
n[i] = atoi(argv[i]);
pthread_create(tid+i, NULL, function, (void *) &n[i]);
}

关于c - 循环内创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484121/

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