def schedule(job)
      
      # If we can't get a lock on the @workforce then the Coordinator is most likely shutting down.
      # We want to skip creating new workers in this case.
      if @job_queue.num_waiting == 0 && @workforce.size < QueueToTheFuture.maximum_workers && @workforce.mu_try_lock
        @workforce.push Thread.new() { while job = @job_queue.shift; job.__execute__; end }
        @workforce.mu_unlock
      end
      
      @job_queue.push(job)
      
      nil
    end
def schedule(job)
      
      # If we can't get a lock on the @workforce then the Coordinator is most likely shutting down.
      # We want to skip creating new workers in this case.
      if @job_queue.num_waiting == 0 && @workforce.size < QueueToTheFuture.maximum_workers && @workforce.mu_try_lock
        @workforce.push Thread.new() { while job = @job_queue.shift; job.__execute__; end }
        @workforce.mu_unlock
      end
      
      @job_queue.push(job)
      
      nil
    end
Append a QueueToTheFuture::Job to the queue.

 If there are workers available, the first available worker will be
 woken up to perform the QueueToTheFuture::Job. If there are no
 available workers, one will be created as long as doing so will
 not cause the workforce to exceed QueueToTheFuture::maximum_workers.

 @param [QueueToTheFuture::Job] job