**使用信号量实现线程 join**:我们既可以用一个信号量实现一次临时的 happens-before,也可以用一个计数型信号量等待数量正确的线程结束。