gpt4 book ai didi

c - 似乎 pthread_create 无法获得正确的参数

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

当我运行以下代码时,打印输出似乎不正确。

void thread_Calc(int *pos) {
printf("recieved %d\n", *pos);
sig = -1;

mandel_Calc(&slices[*pos],maxIterations,&res[(*pos)*slices[*pos].imSteps*slices[*pos].reSteps]);

counter++;
array[counter] = *pos;
sig = *pos;
}


int main(int argc, char *argv[]) {

while (WinH % nofslices != 0) { nofslices++;}

slice_height = WinH/nofslices;

level = 1;

while (1) {

for (i=0; i<nofslices; i++){
array[i] = -1;
}

y=0;
sig = -1;
counter = -1;
for(i=0; i<nofslices; i++){
printf("Passing %d\n", i);

check=pthread_create(&worker[i], NULL, (void*)thread_Calc, (void*)(int *)&i);
if (check!=0) {
printf("Error in pthread_create\n");
return 0;
}

while (sig==-1||array[counter]==-1){

}
}
}
}

(这只是我的代码的一部分,所以假设每个变量都是正确的并且都有一个值)。

我得到的结果是这样的:

Passing 1
Passing 2
recieved 2
recieved 2
Passing 3
Passing 4
recieved 4
recieved 4
Passing 5
Passing 6
Passing 7
Passing 8
Passing 9

这似乎我不能总是在 pthread_create 或其他东西中传递正确的参数。

最佳答案

@Andrew 是对的。您传递的是指针而不是值,因此一旦您在主线程中更改“i”,创建线程接收到的参数中的值就会更改。您需要创建一个副本并将其传递给线程。

参见 pthread_create : passing an integer as the last argument

关于c - 似乎 pthread_create 无法获得正确的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115464/

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