Acquire causes threads waiting on release to stop working.
Note that because the channel is buffered,
this can execute as many times as number of buffers,
thus blocking subsequent callers until one of the buffers is released
Release can be waited on or selected to get a stop work signal.
This essentially empties a slot in the semaphore which allows another
thread to acquire it