【问题标题】:How to pass a struct with an matrix as pthread argument?如何将带有矩阵的结构作为 pthread 参数传递?
【发布时间】:2018-09-05 01:16:56
【问题描述】:

我有以下结构:

typedef struct {
  int row;
  int** matrix;
} values ;

为了填充结构矩阵,我尝试了以下代码:

values **v = (values **)malloc(x * sizeof(values *));
for (int z = 0; z < y; ++z)
     [z] = (values *)malloc(y * sizeof(values));

其中 x 是行数和 y 列数。

如何填充 struct 的参数(rowmatrix)并作为参数传递给 pthread 调用的函数? 类似...

pthread_create(&thread1, NULL, somaLinha, v);

【问题讨论】:

  • values **v 开头的行定义了一个指向value 结构的指针数组的指针(最终可以被视为结构的“二维数组”)。然后为矩阵的每一行分配一个大小为y 结构的数组。但是这些都没有对嵌入在每个结构中的矩阵做任何事情。你确定这就是你想要的吗?

标签: c pthreads


【解决方案1】:

当你为结构体分配空间时,C实际上是要为整数分配空间加上指针空间(即4+8字节)

你需要为struct分配空间,然后allocate for the matrix

values *v = (values *) malloc(sizeof(values));
v->matrix = (int **) malloc(y * sizeof(int *));
for (int z = 0; z < y; ++z)
    v->matrix[z] = (int *) malloc(y * sizeof(int));

然后你创建线程

pthread_create(&thread1, NULL, somaLinha, v);

【讨论】:

  • 非常感谢。您是否也知道如何在结构中填充行的值?为了确认一下,函数声明如下所示:void * somaLinha(v values)?
  • 由于我认为本次讨论并未直接涉及该问题,因此我向您发送了一封包含答案的电子邮件。
  • @MathiasFalci:请注意,所有线程“主”函数都应具有签名void *function(void *data);(函数名称和参数是可变的;类型信息不是)。因此,您的 somaLinha() 应该有声明 void *someLina(void *data)。在函数内部,您可以使用values *vp = data; 或等效项来获取指向矩阵的指针。然后pthread_create() 调用就可以了。您需要决定是线程启动代码还是线程主函数(somaLinha)释放分配的空间;通常最好清理启动代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2013-09-10
  • 2019-03-23
相关资源
最近更新 更多