在我正在构建的系统中,有两种用户--A和B - 可以使用资源R,其中有n个实例可用。 需要R的用户不断堆积在各自的队列中。
分配限制:
当m(m
当一个类型的用户(例如A)当前正在使用m(m
我正在尝试使用信号量来协调R对用户的分配。 Semaphore似乎没有直接支持约束1。
为实现这一目标,我正在考虑采取以下措施:
while(semaphore.CurrentCount < n)
semaphore.Wait();
有更好的方法吗?
我看到SemaphoreSlim有一个方法Release(int32),它允许释放多个资源。
我原本期望Wait(int32)允许等待特定的实例数量变得可用。 但是,提供的Wait(int32)API有不同的用途 - 此处的int32参数指定等待操作的超时。
对应的Wait()和Release()API的语义之间的不对称是不是设计缺陷? 是否有其他一些SemaphoreSlim公开的API可以达到我的目的?
我考虑使用CountDownEvent,但无论如何我还需要Semaphore用于其他约束。将两者结合使用 听起来很尴尬。我正试图单独使用Semaphore。