我有一个应用程序,它使用Mutex对一段代码进行跨进程同步。此机制非常适合当前需要的应用程序。在最坏的情况下,我注意到大约有6个线程可以在Mutex上备份。执行synchronized代码块大约需要2-3秒。
我刚刚收到了一个新的要求,要求为互斥体创建一个优先级特性,以便偶尔可以认为互斥体的一些请求比其他请求更重要。当这些较高优先级的线程之一出现时,所需的功能是让Mutex将获取授权给较高优先级的请求,而不是较低优先级的请求。
那么,有没有办法控制Windows维护的阻塞互斥队列呢?我应该考虑使用不同的线程模型吗?
谢谢,马特
发布于 2010-10-20 22:41:37
只使用Mutex这将是一个很难解决的问题,我相信有人正在考虑线程优先级等问题,但我可能不会考虑这种方法。
一种选择是维护一个共享内存结构并实现一个简单的优先级队列。共享内存可以使用MemoryMappedFile,然后当进程想要执行代码段时,它将具有优先级的令牌放在优先级队列中,然后当它唤醒时,每个线程检查优先级队列以检查队列中的第一个令牌,如果该令牌属于该进程,则它可以将该令牌出队并执行代码。
发布于 2010-10-20 22:35:18
Mutex不是很好,原因有很多,据我所知,没有办法在线程运行时改变提升线程的方式,也不是满足您的需求的好方法。我刚刚读了Jeffrey Richters的"clr via c# 3",里面有很多很棒的线程同步构造,还有很多很好的线程建议。
我希望我能记住足够多的东西来回答你的问题,但我怀疑我能像他那样让人听懂。请查看他的网站:http://www.wintellect.com/或搜索他的一些并发事务文章。他们肯定会有所帮助的。
发布于 2010-10-20 22:44:03
给每个线程一个AutoResetEvent。然后,每个线程将其目标添加到排序列表中,而不是等待互斥锁。如果列表上只有一个事件,则激发该事件,否则等待其触发。当一个线程完成处理时,它从列表中删除它的对象,并激发下一个对象。请确保同步列表。
https://stackoverflow.com/questions/3978893
复制相似问题