#include "common.h"
#include "model.h"
+/** Constructor */
Scheduler::Scheduler() :
current(NULL)
{
}
+/**
+ * Add a Thread to the scheduler's ready list.
+ * @param t The Thread to add
+ */
void Scheduler::add_thread(Thread *t)
{
DEBUG("thread %d\n", t->get_id());
readyList.push_back(t);
}
+/**
+ * Remove a given Thread from the scheduler.
+ * @param t The Thread to remove
+ */
void Scheduler::remove_thread(Thread *t)
{
if (current == t)
readyList.remove(t);
}
-Thread * Scheduler::next_thread(void)
+/**
+ * Remove one Thread from the scheduler. This implementation performs FIFO.
+ * @return The next Thread to run
+ */
+Thread * Scheduler::next_thread()
{
Thread *t = model->schedule_next_thread();
return t;
}
-Thread * Scheduler::get_current_thread(void)
+/**
+ * @return The currently-running Thread
+ */
+Thread * Scheduler::get_current_thread() const
{
return current;
}
+/**
+ * Print debugging information about the current state of the scheduler. Only
+ * prints something if debugging is enabled.
+ */
void Scheduler::print()
{
if (current)
Scheduler();
void add_thread(Thread *t);
void remove_thread(Thread *t);
- Thread * next_thread(void);
- Thread * get_current_thread(void);
+ Thread * next_thread();
+ Thread * get_current_thread() const;
void print();
SNAPSHOTALLOC
private:
+ /** The list of available Threads that are not currently running */
std::list<Thread *> readyList;
+
+ /** The currently-running Thread */
Thread *current;
};
}
/** Return the currently executing thread. */
-
Thread * thread_current(void)
{
ASSERT(model);
curr_thread->start_routine(curr_thread->arg);
}
-/** Create a thread context for a new thread so we can use
- * setcontext/getcontext/swapcontext to swap it out.
- * @return 0 on success.
+/**
+ * Create a thread context for a new thread so we can use
+ * setcontext/getcontext/swapcontext to swap it out.
+ * @return 0 on success; otherwise, non-zero error condition
*/
-
int Thread::create_context()
{
int ret;
}
}
-/** Create a new thread.
- * Takes the following parameters:
- * @param t The thread identifier of the newly created thread.
- * @param func The function that the thread will call.
- * @param a The parameter to pass to this function. */
-
+/**
+ * Construct a new thread.
+ * @param t The thread identifier of the newly created thread.
+ * @param func The function that the thread will call.
+ * @param a The parameter to pass to this function.
+ */
Thread::Thread(thrd_t *t, void (*func)(void *), void *a) :
start_routine(func),
arg(a),
parent = thread_current();
}
+/** Destructor */
Thread::~Thread()
{
complete();
model->remove_thread(this);
}
-/** Return the thread_id_t corresponding to this Thread object. */
-
+/** @return The thread_id_t corresponding to this Thread object. */
thread_id_t Thread::get_id()
{
return id;