在单独的文件中更改全局变量

时间:2019-06-07 20:39:28

标签: c queue global-variables

我正在尝试在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);

,我得到了预期的输出。

0 个答案:

没有答案