【问题标题】:Difficulty passing struct through pthread_create难以通过 pthread_create 传递结构
【发布时间】:2012-03-28 19:05:53
【问题描述】:

我有一个结构数组,我打算将数组的每个元素传递到 for 循环中的单独 pthread 中。

这是我的结构:

struct arrayData{
int *a;
int *b;
int up, low;
}

这是指向第一个结构和 malloc 的指针(不知道我是否完全明白这里发生了什么):

struct arrayData * instance;
        instance = malloc(sizeof(struct arrayData)*n);

这是我对 pthread_create 的调用:

pthread_create( &thread[i], NULL, add, (void *)instance[i]);

对于该行,我收到消息“无法转换为指针类型”。

那条线可能有什么问题?

【问题讨论】:

    标签: c struct pthreads createthread


    【解决方案1】:

    您正在尝试将结构转换为最后一个参数中的指针。您需要使用& 传递结构的地址。

    pthread_create( &thread[i], NULL, add, &instance[i]);
    

    作为 jørgensen mentionedvoid * 演员表是不必要的。

    【讨论】:

    • 太棒了!谢谢你。今年夏天需要在 C 上写书,因为我太生疏了。为什么我仍然会收到一条警告,上面写着“从不兼容的指针类型传递 'pthread-create' 的参数 3。”?
    • add 函数的签名是什么?
    • 太棒了!您能否向我解释一下为什么这个人在本教程中不必这样做:yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
    • @mteckert:这在 C 中是不需要的。事实上,将& 用于函数指针使得不可能进行预处理器时间替换(#define add NULL——并不是说 NULL 对 pthread_create 有用,但在其他情况下是这样)。
    • @Chucky 你在哪里声明了add
    【解决方案2】:

    instancestruct arrayData * 类型,因此 instance[i]struct arrayData 类型,这是一个聚合,而不是指针。预期用途可能是

    pthread_create(&thread[i], NULL, add, &instance[i]);
    

    顺便说一句,演员阵容毫无意义。

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 2023-03-15
      • 2020-01-21
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多