package thread;
import vm.Monitor;
import vm.Process;
import vm.Scheduler;
public class JavaLangThreadScheduler implements Scheduler {
private static class JavaLangThreadMonitor extends vm.Monitor {
private int mutex;
private int conditionVariable;
JavaLangThreadMonitor() {
initializeMutex();
}
private native void initializeMutex();
@Override
public void lock() {
if (mutex != 0) {
acquireMutex();
}
}
private native void acquireMutex();
@Override
public void unlock() {
if (mutex != 0) {
releaseMutex();
}
}
private native void releaseMutex();
}
@Override
public Process getNextProcess() {
return null;
}
@Override
public void wait(Object target) {
waitOnCondition(target);
}
private static native void waitOnCondition(Object target);
@Override
public void notify(Object target) {
notifyOnCondition(target);
}
@Override
public void notifyAll(Object target)
{
}
private static native void notifyOnCondition(Object target);
@Override
public Monitor getDefaultMonitor() {
return new JavaLangThreadMonitor();
}
}