projects
/
c11tester.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
model: move bookkeeping to add_action_to_lists()
[c11tester.git]
/
schedule.cc
diff --git
a/schedule.cc
b/schedule.cc
index 2498347c44cc6e2cb6cbb870a829465c318504db..1791605b7c38842c37d11553c37f663c9dc88c38 100644
(file)
--- a/
schedule.cc
+++ b/
schedule.cc
@@
-3,32
+3,46
@@
#include "common.h"
#include "model.h"
#include "common.h"
#include "model.h"
+Scheduler::Scheduler() :
+ current(NULL)
+{
+}
+
void Scheduler::add_thread(Thread *t)
{
DEBUG("thread %d\n", t->get_id());
readyList.push_back(t);
}
void Scheduler::add_thread(Thread *t)
{
DEBUG("thread %d\n", t->get_id());
readyList.push_back(t);
}
-
Thread *Scheduler::next_thread(void
)
+
void Scheduler::remove_thread(Thread *t
)
{
{
- Thread *t = model->schedule_next_thread();
+ if (current == t)
+ current = NULL;
+ else
+ readyList.remove(t);
+}
- print();
+Thread * Scheduler::next_thread(void)
+{
+ Thread *t = model->schedule_next_thread();
if (t != NULL) {
if (t != NULL) {
+ current = t;
readyList.remove(t);
readyList.remove(t);
- return t;
+ } else if (readyList.empty()) {
+ t = NULL;
+ } else {
+ t = readyList.front();
+ current = t;
+ readyList.pop_front();
}
}
- if (readyList.empty())
- return NULL;
- current = readyList.front();
- readyList.pop_front();
+ print();
- return
curren
t;
+ return t;
}
}
-Thread *Scheduler::get_current_thread(void)
+Thread *
Scheduler::get_current_thread(void)
{
return current;
}
{
return current;
}
@@
-36,12
+50,12
@@
Thread *Scheduler::get_current_thread(void)
void Scheduler::print()
{
if (current)
void Scheduler::print()
{
if (current)
-
printf
("Current thread: %d\n", current->get_id());
+
DEBUG
("Current thread: %d\n", current->get_id());
else
else
-
printf
("No current thread\n");
-
printf("# Threads in ready list: %ld
\n", readyList.size());
+
DEBUG
("No current thread\n");
+
DEBUG("Num. threads in ready list: %zu
\n", readyList.size());
- std::list<Thread *>::iterator it;
+ std::list<Thread *
, MyAlloc< Thread * >
>::iterator it;
for (it = readyList.begin(); it != readyList.end(); it++)
for (it = readyList.begin(); it != readyList.end(); it++)
-
printf
("In ready list: thread %d\n", (*it)->get_id());
+
DEBUG
("In ready list: thread %d\n", (*it)->get_id());
}
}