gpt4 book ai didi

C - 跟踪多个 pThread 的编号

转载 作者:行者123 更新时间:2023-11-30 15:36:22 24 4
gpt4 key购买 nike

我正在尝试编写一个使用 pThreads 的 C 程序。这个特定的程序创建多个线程(1 到 maxNumber)并使用它们执行某些操作(在方法 threadMethod 中)。我将一个结构体 Arguments 传递给 pThread 创建者,其中包含有关线程的必要信息,并且 threadNumber 包含在该结构中。我试图让程序打印当时哪个线程正在工作,但是当我运行程序时,它总是打印 maxNumber 而不是 threadNumber。例如,如果我想创建 3 个线程,我应该有如下输出:

I am thread 1
I am thread 2
I am thread 3

但是我得到的输出不是上面的内容,而是:

I am thread 3
I am thread 3
I am thread 3

我的程序出了什么问题?我感觉这与结构有关,但我不确定。下面是相关代码。

Arguments *arg = malloc(sizeof(Arguments));

int i;
for (i = 0; i < maxNumber; i++) {
arg->threadNumber = (i + 1); /* eg. first thread is Thread 1, not Thread 0 */

if (pthread_create(&threads[i], NULL, threadMethod, (void *)arg)) {
printf("Error while creating thread\n");
return 1;
}
}

--------------------

void *threadMethod(void *arg) {
Arguments *argument;
int threadNumber;

argument = (Arguments*)arg;
threadNumber = argument->threadNumber;

printf("I am thread %d\n", threadNumber);
/* do stuff */
return NULL;
}

最佳答案

所有线程都共享一个 arg 对象,因为您只分配它一次。将 malloc() 移至循环内。

关于C - 跟踪多个 pThread 的编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598147/

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