c - C 中的 Posix Pthread

标签 c pthreads posix

我有以下关于 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/

相关文章:

c++ - 程序接收信号 SIGSEGV 段错误

php - 在 Debian 中使用 pthreads 编译 PHP

c++ - Linux 上的 PThreads 和多核 CPU

c - 在 C 中实现异步函数

objective-c - 有没有办法检查是否获得了 NSLock?

python - 使用 POSIX 排除字符串中的单词

ios - 检测音频文件中的低频音调

python - 有没有办法在 Makefile 中自动生成依赖树?

c - 如何从用户 ID 中检索用户名

linux - Pthreads条件变量错误行为