gpt4 book ai didi

c - 将结构传递给 pthread_create,强制转换后未定义值?

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

我试图将一个结构作为参数传递给 pthread_create ,但似乎得到了一些奇怪的结果。

该结构有两个成员,第一个是 int,第二个是函数指针:

typedef struct
{
int num;
void (*func)(int);
} foo_t;

我尝试在结构中使用的函数:

void myfunc(int mynum)
{
printf("mynum: %d\n", mynum);
}

这是我将传递给线程的结构的声明:

foo_t f;
f.num = 42;
f.func = &myfunc;

调用pthread_create:

pthread_create(&mythread, NULL, mythreadfunc, &f);

最后,我的线程函数:

void mythreadfunc(void *foo)
{
foo_t f = *(foo_t *)foo;
printf("num: %d\n", f.num); // Prints: num: 32776 (undefined?)
(*f.func)(f.num); // Segfaults (again, undefined?)
...

似乎 mythreadfunc 中的强制转换似乎不起作用,我不明白为什么。有什么建议么?谢谢。

最佳答案

Papergay 的答案肯定是一个解决方案,但是如果您想避免动态分配,可以使用的另一种方法就是使用同步。我最喜欢的方法是在结构中放置一个初始值为零的信号量,并让父级等待该信号量,子级在从结构中读取值后发布信号量。

关于c - 将结构传递给 pthread_create,强制转换后未定义值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12037257/

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