多用户多进程互斥信号量的问题

xiaowinwin 2016-02-17 08:50:10
目前有两个进程
A用户: a进程;
asp.net v4.0(IIS用户): w3wp.exe进程

这两个进程会同时访问数据库,所以利用CreateMutex创建一个互斥变量,为了适用多用户第三个参数加了Global\\的变量,并且两个进程都提升了SE_CREATE_GLOBAL_NAME权限。

目前的问题:
如果先打开a进程,此时a进程首先创建互斥变量,再打开w3wp.exe进程,w3wp.exe进程进程访问不了该互斥变量。
如果先打开w3wp.exe进程变量,此时w3wp.exe进程先创建互斥变量,再打开a进程,此时则一切正常,a进程能访问互斥变量。

请问这是什么原因呢,有什么方法可以解决呢?
...全文
997 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独的海啊 2017-12-20
  • 打赏
  • 举报
回复
Mutex可不好用了,windows版本也有关闭,我觉的。试验了好久。最好绕开。 这是win7 win10测试通过的代码; bool runone; run = new System.Threading.Mutex(true, locker, out runone); if (!runone) { log.Write(new Logger.Message("不允许单实例运行", Logger.MessageType.Error)); log.Dispose(); log = null; MessageBox.Show(Properties.Resources.RSI_ERROR, Properties.Resources.RSI_ERROR_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } run.ReleaseMutex();
  • 打赏
  • 举报
回复
首先,正如 #1 楼所说,使用关系数据库的驱动来搞开发,不能不学习过关系数据库的事务。 其次,就算是你的数据库没有事务,而你需要“控制”,你也应该仿照多用户数据库系统一样地,去设计一个服务系统,然后你的各种终端分别访问你的这个服务系统,而你的这个服务系统来访问数据库。这样也根本谈不上什么各种终端分别“互斥”的问题。 第三,就算是你仍没有能力设计一个服务层,那么使用一个只有0个或者1个字节的文本文件就能实现“互斥锁”了,而且各种操作系统均兼容。不一定要使用特别的、麻烦的机制。 当然你最应该考虑的,还是第一步。
Poopaye 2016-02-18
  • 打赏
  • 举报
回复
1楼已经是正确的建议了
xiaowinwin 2016-02-18
  • 打赏
  • 举报
回复
拜托哪位大神在给我的建议吧....
xdashewan 2016-02-17
  • 打赏
  • 举报
回复
第一次听说web并发靠互斥变量来控制。你自己都说访问数据库了,那你应该去了解下数据库事务和锁
Justin-Liu 2016-02-17
  • 打赏
  • 举报
回复
good job

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧