Greatly simplified controller pool logic by replacing the Condition lock
with a Semaphore using the maximum number of controllers as the
semaphore's value.