A concurrency-limiting synchronization primitive, used to limit the number of threads
performing a certain operation or accessing a particular resource at the same time.
The concurrency token returned by Semaphore::wait(), allowing access to the
concurrency-limited region/code. Gives up its slot when dropped, allowing another thread to
enter the semaphore in its place.