繁体   English   中英

如何检查是否可以输入 SemaphoreSlim?

[英]How to check whether a SemaphoreSlim can be entered?

我想以 SemaphoreSlim 方式分配一个对象列表,例如假设每个对象可以同时被两个线程使用。 我的计划是为这个列表中的每个对象创建一个 SemaphoreSlim 类,但是我的问题是我应该如何检查现在是否可以使用 SemaphoreSlim?

我不想调用 Wait() 因为如果一个对象不可用我可以移动到列表中的下一个。 我也不想检查 CurrentCount 属性,因为我认为如果多个线程同时检查 CurrentCount 并且决定在 CurrentCount 大于零时调用 Wait() ,这将是线程安全的。

那么这个场景的理想解决方案是什么?

顺便说一句 - 我可以使用其他解决方案 - 不仅仅是 SemaphoreSlim。

怀疑您可以使用Wait(TimeSpan.Zero)说“尝试获取信号量,但如果您不能立即这样做,请放弃尝试。”

这将是我的期望,但文档没有明确讨论如果传入TimeSpan.Zero会发生什么。 IMO,至少值得进一步研究该选项。

MSDN中明确提到了它。

如果超时设置为零毫秒,则该方法不会阻塞。 它测试等待句柄的状态并立即返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM