Problem Statement
Implement a counting semaphore with Acquire(n) and Release(n) operations that blocks if not enough permits are available.
Requirements
Acquire(n): Block until n permits are available, then consume themRelease(n): Return n permits to the poolTryAcquire(n): Non-blocking acquire, returns false if not enough permits- Thread-safe for concurrent access