c - 在线程函数中取消引用结构数组?

标签 c arrays multithreading struct

我正在将指向结构数组的指针传递给线程函数。

pthread_create(&init_thread, NULL, initialize, reservations);

后来,我不确定如何在线程函数中取消引用它。

预订是

struct reservation reservations[20]  

结构数组。

线程函数初始化如下。

void * initialize(void * args) {
  struct reservation *all_reservations[] = (struct reservation *[])args;

  // Wait for semaphore signals
  sem_wait(mutexA);
  sem_wait(mutexB);

  for (int i = 0; i < 20; i++) {
    if (all_reservations[i]) {
      all_reservations[i] = NULL;
    }
  }
  // Signal semaphores for other processes
  sem_signal(mutexA);
  sem_signal(mutexB);

  printf("%s\n","All reservations are initialized.");
}

我收到这个错误: 错误:强制转换为不完整类型“struct reservation *[]”

最佳答案

请记住,数组会衰减为指向其第一个元素的指针。

所以当你将参数reservations传递给pthread_create调用时,它实际上和&reservations[0]一样,都是类型结构预留 *。您应该在线程函数中使用哪种类型。

换句话说,在线程函数initialize 中,您没有指针数组,而只是指向结构数组第一个元素 的普通指针.每个元素都是 struct reservation 类型,即不是指针。


除此之外,我没有看到使用线程对 reservations 数组进行简单初始化。它所做的(初始化每个结构)必须在任何其他处理完成之前完成,因此它本质上是串行。它必须在其他任何事情之前完成,没有必要甚至不需要用于任何类型的并行工作。

关于c - 在线程函数中取消引用结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47084178/

相关文章:

arrays - Kotlin - 检查数组是否包含值的惯用方法

c - 反转字符串(交换)

c - 为什么访问 malloced 结构数组的成员会出现段错误?

php - 将包含字符串和数字的多维数组插入 MySQL

php - 多维数组中的 Foreach

python - 在 Python 中排队线程

c - 打印字符串时出现意外结果

数据结构可以包含多种类型的元素吗?

c# - 多线程与datagridview

C++:_beginthreadex,线程函数名称未显示在 Visual Studio 线程窗口中