c# - 信号量动态调整大小 C#

标签 c# dynamic semaphore resize

我正在尝试使用信号量来控制可以同时运行多少个作业实例。虽然使用 wait 方法这很简单,但我还希望该值在运行时是可配置的,以便我可以增加或减少计数。

我意识到倒计时可能会出现问题,但有没有办法真正做到这一点?这是使用信号量的正确方法吗?

最佳答案

根据 ReleaseSemaphore 的文档,对于 lReleaseCount 参数:

The amount by which the semaphore object's current count is to be increased. The value must be greater than zero. If the specified amount would cause the semaphore's count to exceed the maximum count that was specified when the semaphore was created, the count is not changed and the function returns FALSE.

这个和其他文档表明信号量不是您的限制的正确选择。信号量一旦创建,就会有一个硬最大值,如果不重新创建信号量就无法更改。换句话说,它不是一个可以更改的动态值

在这种情况下,您需要找到另一种管理限制的方法。

可以使用信号量的一种方法是分配一个足够大的信号量来满足所有 future 的需求,然后只获取它的足够“实例”以将可用数量减少到您目前需要的数量。当您想要增加可用实例的数量时,只需释放您在开始时抓取的一些实例即可。

但是,我质疑你为什么要这样做。真正决定在这里可以同时执行多少作业的限制因素是什么?信号量很可能不是对此的正确答案。

关于c# - 信号量动态调整大小 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5600278/

相关文章:

sql - 我应该如何(如果我应该的话)实现通用数据库表而不落入内部平台效应?

java - Java可设置过期的全局分布式锁

c# - 对象关系映射

c# - 比较泛型 : A "master-type" IEnumerable<> that is generic, 但匹配所有特定类型(IEnumerable<int>、IEnumerable<object>、...)?

c# - EF Core 5.0 - 更改 "Defining Query"映射实体时是否需要生成迁移?

python - Django 动态小部件/表单字段表示

python - 动态函数创建和函数体评估

multithreading - 使用多线程算法进行交通路口模拟

java - 信号量如何以及为什么可以发出比初始化时更多的许可?

c# - 如示例所示,将 SendGrid 包与 C# "Web"一起使用是未定义的