【发布时间】:2021-06-30 21:07:28
【问题描述】:
我对如何将结构参数传递给 for 循环中的线程感到困惑。
当我尝试使用这种方法时,我得到了垃圾端口值。当我尝试在没有指针的情况下将 struct 更改为 astruct argstruct; 时,第二个端口会覆盖第一个端口,因此我得到了 200 200 打印。
另外,我是否必须 free main、Func 中的结构,或两者兼而有之?
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* Func(void* pstruct);
typedef struct thread_args{
int port;
} astruct;
int main()
{
int peers[2] = {100,200};
pthread_t threads[2];
astruct *argstruct[2];
for (int i = 0; i < 2; i++) {
argstruct[i] = malloc(sizeof(astruct));
argstruct[i]->port = peers[i];
pthread_create(&threads[i],NULL,Func,&argstruct[i]);
}
for(int i = 0; i < 2; i++){
pthread_join(threads[i], NULL);
}
return 0;
}
void* Func(void* pstruct){
int port;
astruct *argstruct = (astruct *)pstruct;
port = argstruct->port;
printf("port: %d\n", port);
return 0;
}
【问题讨论】:
-
@JanezKuhar 当你这样做时:
Func[无括号]它是函数的地址。&没有伤害,但使用 [仅]Func更规范。它允许Func成为函数指针(例如):void *(*Func)(void *) = otherFunc;和Func可以传递给pthread_create(例如)pthread_create(&threads[i], NULL, Func, argstruct[i]);因此,函数地址和指向函数的指针可以可以互换使用。
标签: c memory-management pthreads