- use Semaphore to solve multi-thread synchronization