Implement a multithreaded task executor with semaphores | SoFi Coding Question