Semaphore is actually a variable or abstract data type which controls access to a common resource by multiple processes.
Binary semaphore : It can have only two values (0 and 1). The semaphore value is set to 1 by the process in charge, when the resource is available.
Counting semaphore : It can have value greater than one. It is used to control access to a pool of resources.