According to Wikipedia:
Semaphores are a useful tool in the prevention of race conditions; however, their use is by no means a guarantee that a program is free from these problems. Semaphores which allow an arbitrary resource count are called counting semaphores, while semaphores which are restricted to the values 0 and 1 (or locked/unlocked, unavailable/available) are called binary semaphores and are used to implement locks.
Is a semaphore always initialized to the maximum value it can take?
Is the difference between a counting semaphore and a binary semaphore only their initial value: a semaphore is binary if and only if it is initialized to 1, and counting but not binary if and only if it is initialized to an integer larger than 1?