问题描述
A地和B地之间有一条弯曲的路,其中的每一段路每次只允许一辆自行车通过,且每个方向每次只允许一人通过,但中间有一个”安全岛“(同时允许两辆自行车停留),可供两辆自行车已从两端进人小路情况下错车使用,请设计一个算法使来往的自行车均可顺利通过。
问题分析
首先有两个线程,表示从A地到B地,和从B地到A地,那么需要设置几个信号量呢?拿从A到B来说,因为一个方向一次只能过一个人,所以在一个人没到B地之前,都不能有人从A出发,所以需要对这设置一个信号量 ,然后从A地到安全岛之前有一段路,可能这段路被从A到B的人占据,也可能被从B到A的人占据,所以需要对这段路设置一个信号量。同理,从B到A也需要设置这样两个信号量。这是可能会有人想,安全岛只能容纳两个人,要不要对安全岛也设置一个信号量,其实是不需要的。因为一个方向一次只能过一个人,所以在任何时刻,路上最多也两个人,所以不需要对安全岛设置信号量。
问题解决
import java.util.concurrent.Semaphore;
public class JcMain {