Arm*_*yan 6 c# c++ winapi multithreading synchronization
我有这个问题:Thread1可能会设置一个自动重置事件,并且有许多线程可能会等待该事件.有没有什么方法可以指定特定事件的等待线程的优先级,也就是说,如果说事件已设置且A和B都在等待它,我想确保B可以工作,并且A将等待下一次机会.这个的任何同步对象?语言不那么重要.
提前致谢
您所描述的问题需要实时调度程序和同步器。虽然我知道 Windows API 中存在此类内容,但我尽力避免了解它们。
我的建议是,除非系统的其余部分是真正的实时系统,否则我的建议是使用优先级队列推出您自己的解决方案。确保每个线程在注册时将其有效优先级传达给队列,在 condvar 上阻塞该线程,并对其进行安排,以便在事件发生时仅将其传递给队列中的第一个线程。
这里可能存在一些丑陋的黑客攻击,但如果线程数很少,您可以对每个等待线程使用一个 condvar 进行某种暴力操作并使其工作。
根据您的需要,请考虑这一点:每个事件接收器线程都有一个带有互斥锁和 condvar 的关联事件队列(也许它实际上是一个邮箱;一个 1 深的队列)。当线程注册接收事件时,它们会被添加到上面的优先级队列中,然后阻塞。当事件发生时,事件传递线程选择最高优先级的队列成员,将其删除,将事件通知传递到各个线程的事件队列,唤醒该线程。
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |