我有以下关于 posix 的 pthread 的问题。
当我们在
pthread_join()
中接收到线程正在执行的函数返回的数据时,我们将变量类型转换为(void **)
甚至尽管该变量是单个指针。int *x; pthread_join(tid,(void**)&x); printf("%d",*x);
我应该取消对类型转换参数的引用(在结构的情况下)吗?为什么我不能像
struct Data *obj= & (struct Data*)arg;
?int main() { ... pthread_create(tid,NULL,Foo,&obj); ... } void *Foo(void *arg) { struct Data *obj=* (struct Data*)arg; }
pthread_join()
如何在内部接收返回的变量。
问候
最佳答案
首先,你不应该做 (void**)&x
因为不同类型的指针不需要相同的大小。
现在,一些场景(一些有效,一些有效但无效,一些刚刚损坏):
Foo() 返回指向 int(有效)
的指针:
void* Foo(void *arg)
{
int *ret = malloc(sizeof(int));
*ret = 42;
return ret;
}
void *ptr;
int *x;
pthread_join(thread, &ptr);
x = ptr;
printf("%d", *x);
free(x);
Foo() 返回一个 int(无效但通常有效):
int 大于指针的平台将不起作用。
void* Foo(void *arg)
{
return 42;
}
void *ptr;
int x;
pthread_join(thread, &ptr);
printf("%d", (int)ptr);
Foo() 返回指向 static int 的指针(无效且从不工作):
当 Foo() 返回时,pthread_join()
可以复制值之前,Foo() 中的所有静态内存都被释放。
void* Foo(void *arg)
{
int ret = 42;
return &ret;
}
void *ptr;
int *x;
pthread_join(thread, &ptr);
x = ptr;
printf("%d", *x);
关于c - C 中的 Posix Pthread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13863239/