【发布时间】:2020-08-07 10:39:13
【问题描述】:
我正在尝试编写一个 C 项目来模拟航空公司的空中交通管制。有一个 Plane 结构必须有一个互斥锁和条件。
这是结构:
typedef struct Plane {
int ID;
int arrival_time;
pthread_mutex_t lock;
pthread_cond_t cond;
}Plane;
还有创建和使用Plane 结构的着陆/离开函数。但是,我不知道如何在函数内初始化结构的互斥锁。
void landing_func(int arrival_time)
{
Plane plane;
plane.ID = ++plane_id;
plane.arrival_time = arrival_time;
// initialize lock and cond here
};
但是,我不知道该怎么做。我还声明了一个创建并返回 Plane*
Plane* createPlane(int arrival_time){
Plane* plane;
plane = (Plane*)malloc(sizeof(Plane));
plane->arrival_time = arrival_time;
plane->ID = ++plane_id;
pthread_mutex_init(&plane->lock, NULL);
pthread_cond_init(&plane->cond, NULL);
return plane;
};
我不确定这个初始化的正确性。
一个小问题:我可以返回Plane 而不是Plane* 吗?我在其他功能中需要Plane 而不是Plane*。
【问题讨论】:
-
关于您的“小问题”,答案是否。您正在通过
malloc分配指向区域的指针,因此您必须返回指针。通常,将指向struct的指针传递给函数比将整个 结构内容传递到堆栈上更容易。还有哪些其他函数采用Plane[作为参数]。例如,在landing_func中使用Plane[可能] 是错误的(即)在设置之后,数据会去哪里——它是返回还是传递给另一个函数?请编辑您的问题并发布您的整个代码。 -
例如,更可能的是,您可能想要:
Plane *plane = createPlane(3); landing_func(plane,7);并更改为:void landing_func(Plane *plane, int arrival_time)