繁体   English   中英

带锁的 C# 线程池

[英]C# Thread Pool with Locking

我对 C# 真的很陌生,并且很想学习最有效的方法和实用程序类来帮助处理线程。

我想要做的是管理一个作业队列。 每个作业都有一个适用的组。 作业可以并行运行,但每个分组只能运行一个作业。 在一组 1000 个要处理的作业中,可能有 100 个不同的分组。

在伪代码中,它将是:

    var job = Jobs.First(job.GroupNotExecuting);
    job.RunSynchronously();

其中job.GroupNotExecuting检查该组是否有可用的锁。

在 C# 中实现它的最佳方法是什么?

如前所述,我是 C# 的新手,所以只想为这样的场景养成最佳习惯。 将不胜感激!

(以防万一,我在 Visual Studio 2013、.NET Framework 4.5 中工作)

您可以尝试在每个类中使用一个布尔值作为“isBusy”标志。 当作业开始时,它将“isBusy”设置为 true,然后执行它应该执行的任何操作。 但就在作业完成之前,它将“isBusy”设置为 false。

对于调用代码,它只需要检查“isBusy”布尔值。 如果为真,则作业仍在运行。 如果为 false,则作业已完成或尚未运行。

或者,使用 System.Threading 命名空间。 这些给你一个可以在后台工作完成时调用的事件。

最后,我使用SemaphorSlim类来处理更新。

对于每个作业,我添加了从共享/静态列表中获取信号量并等待它可用的过程。 通过这种方式,它们可以被添加到同一个联合池中,并在它们可用时进行处理。

不利的一面是,理论上一个线程可能正在等待另一个线程进行处理,否则它可能会同时寻找另一个作业来处理。

暂无
暂无

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

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