首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net互斥问题

.Net互斥问题
EN

Stack Overflow用户
提问于 2010-10-20 22:25:27
回答 3查看 428关注 0票数 2

我有一个应用程序,它使用Mutex对一段代码进行跨进程同步。此机制非常适合当前需要的应用程序。在最坏的情况下,我注意到大约有6个线程可以在Mutex上备份。执行synchronized代码块大约需要2-3秒。

我刚刚收到了一个新的要求,要求为互斥体创建一个优先级特性,以便偶尔可以认为互斥体的一些请求比其他请求更重要。当这些较高优先级的线程之一出现时,所需的功能是让Mutex将获取授权给较高优先级的请求,而不是较低优先级的请求。

那么,有没有办法控制Windows维护的阻塞互斥队列呢?我应该考虑使用不同的线程模型吗?

谢谢,马特

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-20 22:41:37

只使用Mutex这将是一个很难解决的问题,我相信有人正在考虑线程优先级等问题,但我可能不会考虑这种方法。

一种选择是维护一个共享内存结构并实现一个简单的优先级队列。共享内存可以使用MemoryMappedFile,然后当进程想要执行代码段时,它将具有优先级的令牌放在优先级队列中,然后当它唤醒时,每个线程检查优先级队列以检查队列中的第一个令牌,如果该令牌属于该进程,则它可以将该令牌出队并执行代码。

票数 3
EN

Stack Overflow用户

发布于 2010-10-20 22:35:18

Mutex不是很好,原因有很多,据我所知,没有办法在线程运行时改变提升线程的方式,也不是满足您的需求的好方法。我刚刚读了Jeffrey Richters的"clr via c# 3",里面有很多很棒的线程同步构造,还有很多很好的线程建议。

我希望我能记住足够多的东西来回答你的问题,但我怀疑我能像他那样让人听懂。请查看他的网站:http://www.wintellect.com/或搜索他的一些并发事务文章。他们肯定会有所帮助的。

票数 0
EN

Stack Overflow用户

发布于 2010-10-20 22:44:03

给每个线程一个AutoResetEvent。然后,每个线程将其目标添加到排序列表中,而不是等待互斥锁。如果列表上只有一个事件,则激发该事件,否则等待其触发。当一个线程完成处理时,它从列表中删除它的对象,并激发下一个对象。请确保同步列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3978893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档