我正在尝试在c中实现一个任务调度程序,其中我的Queue结构及其功能位于单独的文件中,如下所示:
int comp(const void *a, const void *b){
return 0;
}
Queue* q = NULL;
int init_LCFS_PR()
{
// TODO
if ((q = queue_new(comp))){
return 0;
}
return 1;
}
void arrive_LCFS_PR(int id, int length)
{
// TODO
def_task a;
a.id = id;
a.length = length;
queue_offer(q, &a);
}
def_task *tick_LCFS_PR()
{
// TODO
def_task* a_ = queue_poll(q);
printf("%d %d\n", a_->id, a_->length);
return NULL;
}
我的主要角色如下:
int main(int argc, char** argv)
{
if (init_LCFS_PR() == 0)
{
arrive_LCFS_PR(0, 3);
arrive_LCFS_PR(1, 6);
arrive_LCFS_PR(2, 4);
tick_LCFS_PR();
tick_LCFS_PR();
tick_LCFS_PR();
}
return 0;
问题是我正在关注输出
2 4
2 4
2 4
当我在单独的文件中定义Queue结构时,拉动仅返回最后添加的元素。但是当我在主体中这样定义队列时:
def_task a;
a.id = 0;
a.length = 3;
def_task b;
b.id = 1;
b.length = 6;
def_task c;
c.id = 2;
c.length = 4;
Queue* q = queue_new(&comp);
queue_offer(q, &a);
queue_offer(q, &b);
queue_offer(q, &c);
def_task* a_ = queue_poll(q);
def_task* b_ = queue_poll(q);
def_task* c_ = queue_poll(q);
printf("%d %d\n", a_->id, a_->length);
printf("%d %d\n", b_->id, b_->length);
printf("%d %d\n", c_->id, c_->length);
,我得到了预期的输出。