use counting semaphore for user throttling