A semaphore has a fixed number of permits which can be acquired and released by different threads. If all are acquired then all threads wanting to acquire must wait until one is released.