struct thread_list_node *head, *tail;
struct thread_list_node nodes[NUM_LIST_NODES];
+struct thread *current;
static void enqueue_thread(struct thread *t)
{
tail = node;
}
-struct thread *dequeue_thread(void)
+static struct thread *dequeue_thread(void)
{
struct thread *pop;
tail = NULL;
head = head->next;
+ /* Set new current thread */
+ current = pop;
+
return pop;
}
-void schedule_add_thread(struct thread *t)
+static void default_add_thread(struct thread *t)
{
DEBUG("thread %d\n", t->index);
enqueue_thread(t);
}
-struct thread *schedule_choose_next(void)
+static struct thread *default_choose_next(void)
{
return dequeue_thread();
}
+static struct thread *default_thread_current(void)
+{
+ return current;
+}
+
void scheduler_init(struct model_checker *mod)
{
struct scheduler *sched;
- /* Initialize FCFS scheduler */
+ /* Initialize default scheduler */
sched = malloc(sizeof(*sched));
sched->init = NULL;
sched->exit = NULL;
- sched->add_thread = schedule_add_thread;
- sched->next_thread = schedule_choose_next;
- sched->get_current_thread = thread_current;
+ sched->add_thread = default_add_thread;
+ sched->next_thread = default_choose_next;
+ sched->get_current_thread = default_thread_current;
mod->scheduler = sched;
}