user2938381
user2938381

Reputation: 1

Round Robin in Java

I am working on a round robin algorithm in Java, and I have a loop that is not working correctly. I believe it is a simple logic error that I am missing. The exec[] array holds execution times for processes in a cpu. I need the quantam to be subtracted from that time or the amount of time left if less than the quantam. Then I need it to check the next process. Each process should have one pass through until the execution time is 0. The sum makes sure that the statements keep running while there is any one process that needs to run. The sum is simply from adding all the array element times.

while (sum != 0) {
        int show = i + 1;
        if (exec[i] != 0 && exec[i] > quant) {
            exec[i] = exec[i] - quant;
            sum = sum - quant;
            JOptionPane.showMessageDialog(null, "Process" + "  " + show + " is at" + "  " + exec[i]);
            JOptionPane.showMessageDialog(null, "sum" + " " + " is " + sum);
            if (i == irq - 1) {
                i = 0;
            } else {
                i++;
            }
        }
        if (exec[i] != 0 && exec[i] < quant) {
            exec[i] = exec[i] - exec[i];
            sum = sum - exec[i];
            JOptionPane.showMessageDialog(null, "Process" + "  " + show + " is at" + "  " + exec[i]);
            JOptionPane.showMessageDialog(null, "sum" + " " + " is " + sum);
            if (i == irq - 1) {
                i = 0;
            } else {
                i++;
            }
        }

    }

Please let me know if there is a fix or if any more information is needed. Thanks!

Upvotes: 0

Views: 1052

Answers (2)

Christian Kuetbach
Christian Kuetbach

Reputation: 16060

I am not sure, what you want to do. It sounds like "I want Multithreading to make my application faster" but within in Single-Core loop, you won't succeed.

If you want a CPU round robin, let the JVM (or the operating system) decide. Both are made for this:

Some kind of java pseudo-Code:

int threadPoolSize = Runtime.getRuntime().availableProcessors();
ExecutorService pool = Executors.newFixedThreadPool(threadPoolSize);
pool.execute(new ImplementationOfCallableOrRunnable());

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html

Upvotes: 1

iluxa
iluxa

Reputation: 6969

exec[i]=exec[i]-exec[i];
sum=sum-exec[i];

Is same as

exec[i]=0;
sum=sum-0;

Also, you don't treat the case of exec[i]==quant

Upvotes: 2

Related Questions