package nachos.ag;
import nachos.threads.ThreadedKernel;
/**
* A naive testgrader for join operation
*
* @author Kang Zhang
*/
public class JoinGrader extends BasicTestGrader
{
@Override
void run ()
{
// check dependency
assertTrue(ThreadedKernel.alarm != null, "This test require alarm.");
final long waitTicks = getIntegerArgument("waitTicks");
long times = getIntegerArgument("times");
// check argument
assertTrue(times > 0, "invalid numThreads argument");
assertTrue(waitTicks > 0, "invalid waitTicks argument");
for (int i = 0; i < times; i++)
{
ThreadHandler handler = forkNewThread(new Runnable()
{
public void run ()
{
ThreadedKernel.alarm.waitUntil(waitTicks);
}
});
handler.thread.join();
assertTrue(handler.finished,
" join() returned but target thread is still running");
}
done();
}
}