我将要开始一个 C# .NET 4.0 项目,创建一个工作调度程序。
- 该工作没有到期日期,可能长时间运行,最长可达数天。
- 该工作有三个优先级:空闲、普通、关键;从低到高排序。
- 新的工作将持续不断地创建。
- 即使旧工作已经存在很长时间,带有更高优先级的新工作也应优先处理。
- 每个工作将由单个长时间运行的线程处理。
- 工作是可重入的。工作的状态会保存到数据库中,因此随时暂停或终止工作线程都可以。
我的计划是使用信号量,并将并发条目数设置为系统核心数。对于队列中的每个工作,都将创建一个新线程,并且所有线程在开始时都会被信号量阻止。
我的问题是如何确保高优先级线程在信号量调用 release() 方法时首先进入信号量。这可行吗?
我的第二个问题是如何使处于信号量内部的线程退出,并在更高优先级的工作线程出现时,将退出的工作线程返回到线程队列中等待信号量。这可行吗?
对于这两个问题,信号量是正确的方法吗?如果不是,您有什么建议?