mutex的问题,诚心请教

linainversedota 2013-04-01 03:51:15
我的站点里,有个功能需要操作服务器上的文件(不是简单的读写),为了避免并发的错误

我使用mutex来互斥保护,当一进去的时候就去申请一个mutex,然后一直等,等到mutex不被占用时再执行代码。当执行完毕后释放,让别的线程可以使用。

try{
Mutex m = new Mutex(false, "MyMutex");

m.WaitOne();
}
catch{

}
finally
{
//TraceLog.mylogLn("Mutex 释放");

m.ReleaseMutex();

}



现在有2个问题:
1.经常有时候mutex拿不到,在m.WaitOne();的地方程序就像死了一样,要等好久。要手动关闭网页。

2.每次到finally块 m.ReleaseMutex();都会报一个异常,说是终止线程


请问mutex在网站上应该怎么用啊


...全文
169 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
linainversedota 2013-04-01
  • 打赏
  • 举报
回复
引用 1 楼 gomoku 的回复:
1、WaitOne有超时的重载。如果你不能容忍超时,则要检讨你的逻辑。 2、 C# code?123456789bool mutexAcquired = false;try{ mutexAcquired = m.WaitOne();}finally{ if (mutexAcquired)m.ReleaseMutex();}
我在本机测试的时候,显然没有另一个线程执行的时候,WaitOne有时候也要等上好久。我觉得这个应该不是超时的问题,当然,超时我会再处理 另外你的代码是判断有没有拿到mutex,没拿到就ReleaseMutex的话,我担心可能会造成mutex的失效
gomoku 2013-04-01
  • 打赏
  • 举报
回复
1、WaitOne有超时的重载。如果你不能容忍超时,则要检讨你的逻辑。 2、

bool mutexAcquired = false;
try
{
  mutexAcquired = m.WaitOne();
}
finally
{
  if (mutexAcquired)m.ReleaseMutex();
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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