See what happens if we don't care about critical sections :)
Yes even we are not able to increment an integer without using any synchronization primitives.So we see the values of "i" 10-11-10 which are highlighted in the messages pane of my ide.
And...Here is the succesfull result in which we are using a Semaphore from java 1.5 (Tiger).
import java.util.concurrent.locks.*;
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
int i = 0;
public static void main (String[] args) {
final SemaphoreExample example = new SemaphoreExample();
final Semaphore semaphore = new Semaphore (1);
final Runnable r = new Runnable () {
public void run () {
while (true) {
try {
semaphore.acquire();
example.printSomething ();
Thread.sleep (1000);
semaphore.release();
} catch (Exception ex) {
System.out.println (" -- Interrupted...");
ex.printStackTrace ();
}
}
}
};
new Thread (r).start ();
new Thread (r).start ();
new Thread (r).start ();
}
public void printSomething (){
i++;
System.out.println (" -- current value of the i :"+ i);
}
}


I run this example repeatedly. Its failing to give correct output. simultaniously more then one thread is running semaphore block at a time.
ReplyDelete