是否可以实现在定时间隔内使用许可的信号量?

Is it possible to implement a semaphore that avails permits in timed intervals?

我正在尝试实施一个最多允许 5 位顾客同时进入商店的程序。他们四处走动(一次一个街区,每个街区最多 1 位顾客)然后退出。我面临的问题是,我的信号量有 5 个许可证,一次将它们全部扔到入口处,这违反了我的一个条件(每个街区只有 1 个客户)。这就是我处理入口的方式

public synchronized GridBlock enterShop() throws InterruptedException  {
    semaphore.acquire();
    GridBlock entrance = whereEntrance();
    return entrance;
}   

如果每个“块”有一个客户的限制,那么直接的解决方案是每个块一个信号量,限制为 1。当客户继续前进时,您必须首先“向下”输入块的信号,并“向上”留下块的 sema。

如果您有 5 个以上的街区,但总共仍有 5 个顾客的限制。那么你还需要入口 sema.That 进入第一个街区时“向下”,离开最后一个街区时“向上”。

对所有块使用单个信号量(限制为 5),而不使用其他,隐式地没有施加其他限制。