used for access to a pool of identical resources, can have values from 0 to N, when a task takes a counting its value is decremented by 1, when n=0, counting semaphore is no longer available, when task releases the counting its value is incremented by 1, n=1 is just a binary semaphore