我正在将指向结构数组的指针传递给线程函数。
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/