Я пытаюсь реализовать планировщик задач в 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);
, я получаю ожидаемый результат.