Изменение глобальной переменной в отдельном файле - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь реализовать планировщик задач в c, где у меня есть структура очереди и ее функции в отдельном файле, как это:

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

Функция Pulling возвращает только последний добавленный элемент, когда я определяю структуру очереди в отдельном файле. Но когда я определяю свою очередь в основном так:

            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);

, я получаю ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...