From: Brian Norris Date: Thu, 15 Mar 2012 05:52:42 +0000 (-0700) Subject: schedule: use STL list class instead of custom queue X-Git-Tag: pldi2013~574 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=commitdiff_plain;h=ec6458e388eb7f7bd5ae21047f4d7a5b34d22a9e schedule: use STL list class instead of custom queue --- diff --git a/schedule.cc b/schedule.cc index 4f5f3de..687d306 100644 --- a/schedule.cc +++ b/schedule.cc @@ -5,67 +5,27 @@ #include "common.h" #include "model.h" -struct thread_list_node { - struct thread *t; - struct thread_list_node *next; - int live; -}; - -#define NUM_LIST_NODES 32 - -struct thread_list_node *head, *tail; -struct thread_list_node nodes[NUM_LIST_NODES]; struct thread *current; -static void enqueue_thread(struct thread *t) +void DefaultScheduler::add_thread(struct thread *t) { - int i; - struct thread_list_node *node; - - for (node = nodes, i = 0; node->live && i < NUM_LIST_NODES; i++, node++); - if (i >= NUM_LIST_NODES) { - printf("ran out of nodes\n"); - exit(1); - } - node->t = t; - node->next = NULL; - node->live = 1; - - if (tail) - tail->next = node; - else - head = node; - tail = node; + DEBUG("thread %d\n", t->id); + queue.push_back(t); } -static struct thread *dequeue_thread(void) +struct thread *DefaultScheduler::next_thread(void) { - struct thread *pop; + struct thread *t; - if (!head) + if (queue.empty()) return NULL; - pop = head->t; - head->live = 0; - if (head == tail) - tail = NULL; - head = head->next; + t = queue.front(); + queue.pop_front(); - /* Set new current thread */ - current = pop; + current = t; - return pop; -} - -void DefaultScheduler::add_thread(struct thread *t) -{ - DEBUG("thread %d\n", t->id); - enqueue_thread(t); -} - -struct thread *DefaultScheduler::next_thread(void) -{ - return dequeue_thread(); + return t; } struct thread *DefaultScheduler::get_current_thread(void) diff --git a/schedule.h b/schedule.h index eb0f68c..762e168 100644 --- a/schedule.h +++ b/schedule.h @@ -1,6 +1,8 @@ #ifndef __SCHEDULE_H__ #define __SCHEDULE_H__ +#include + #include "libthreads.h" #include "model.h" @@ -16,6 +18,8 @@ public: void add_thread(struct thread *t); struct thread * next_thread(void); struct thread * get_current_thread(void); +private: + std::list queue; }; #endif /* __SCHEDULE_H__ */