I suppose you know all of this is used for concurrent and multi-threading programing...
These semaphores are used to "inform" to the applications that another application or thread is accesing to data or perform some operation that must be executed without any interruption (this is called a critical region).
I guess you will find this useful:http://www.fact-index.com/m/mu/mutual_exclusion.html
Semaphores are the java implementation for mutual exclusion, if a thread try to access to the critical region, before must check the semaphore, if the value of the semaphore is 0, the thread must wait until another thread leaves this critical region, when this occurs the leaving thread increments the value of the semaphore and make a call to the notify() method that "awakes" a waiting thread, if the value of semaphore is 1 this thread can access to the critical region and must decrease semaphore's value until leaving.
Hope this will help.