mutex 不起作用的问题 求救!!!

scsq 2006-07-12 10:52:07
我的代码如下:
该代码作为web服务的一部分代码,为什么mutex起不到作用,经常出现同时获取到互斥体造成程序无法运行的问题,请高手解答!
代码:
public class WriteLog
{
private static System.Threading.Mutex CASLogmutex = new System.Threading.Mutex(false,"CASLogmutexName");

public WriteLog()
{
}

public static void WriteCASLog(string message)
{
string file=Global.ServerFilePath+"LogFile\\CAS\\"+DateTime.Now.ToShortDateString()+".txt";
string message1=DateTime.Now.ToString()+" : "+message+"\r\n";

CASLogmutex.WaitOne();
WriteLog.WriteMessageToText(file,message1);
CASLogmutex.ReleaseMutex();
}

public static void WriteCASLogAndThrowException(string message)
{
string file=Global.ServerFilePath+"LogFile\\CAS\\"+DateTime.Now.ToShortDateString()+".txt";
string message1=DateTime.Now.ToString()+" : "+message+"\r\n";

CASLogmutex.WaitOne();
WriteLog.WriteMessageToText(file,message1);
CASLogmutex.ReleaseMutex();

throw new Exception("CAS管理器返回异常:"+message);
}

}

该代码是想实现对日志文件的互斥访问写入,当mutex起不了作用 还是经常出现同时访问同一个日志文件的情况,造成程序异常
...全文
736 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
scsq 2006-07-13
  • 打赏
  • 举报
回复
按 mutex的例子我的应该是可以的

但现在不行 请各位再看看 究竟是什么地方出错了
scsq 2006-07-13
  • 打赏
  • 举报
回复
用lock肯定是不行的

我的是要实现2处代码用同一个资源

就是多个地方多个代码块对同一个文件写入 而不是写入的只有一个代码块
www_123du_com 2006-07-13
  • 打赏
  • 举报
回复
基本上懂明白你的代码意思了,你的用法似乎不对,这里用lock就行了:
lock (typeof(WriteLog))
{
WriteLog.WriteMessageToText(file,message1);
}

互斥体对象针对同一个互斥体互斥,但你一直是用的同一个互斥体对象,这种做法本身就有问题。(不过我没试过!只觉得思路有问题。)
www_123du_com 2006-07-13
  • 打赏
  • 举报
回复
名字一样的就会互斥
名字不一样的就是另外一个互斥体,没有关系。
private static System.Threading.Mutex CASLogmutex1 = new System.Threading.Mutex(false,"CASLogmutexName");
private static System.Threading.Mutex CASLogmutex2 = new System.Threading.Mutex(false,"CASLogmutexName");
private static System.Threading.Mutex CASLogmutex3 = new System.Threading.Mutex(false,"CASLogmutexName3");

CASLogmutex1和CASLogmutex2会互斥,CASLogmutex1和CASLogmutex3完全没有任何关系。
scsq 2006-07-13
  • 打赏
  • 举报
回复
各位大大看看嘛
scsq 2006-07-13
  • 打赏
  • 举报
回复
继续顶起
marvelstack 2006-07-13
  • 打赏
  • 举报
回复
可以参考这里mutex的用法,
http://blog.csdn.net/zhzuo/archive/2006/06/30/857405.aspx#sec3
你这里应该是WebService中的多个线程中使用mutex.
scsq 2006-07-13
  • 打赏
  • 举报
回复
没看明白

互斥体对象针对同一个互斥体互斥,但你一直是用的同一个互斥体对象。(这里,互斥体指windows提供的互斥体。互斥体对象指.NET的对象)

你应该是用一个互斥体,多个对象来达到互斥效果。

一个 mutex对象表示什么 一个互斥体

那多个对象来达到互斥效果。
是什么意思
www_123du_com 2006-07-13
  • 打赏
  • 举报
回复
互斥体对象针对同一个互斥体互斥,但你一直是用的同一个互斥体对象。(这里,互斥体指windows提供的互斥体。互斥体对象指.NET的对象)

你应该是用一个互斥体,多个对象来达到互斥效果。
scsq 2006-07-13
  • 打赏
  • 举报
回复
www_123du_com(www.123du.com)

请问为什么要删除 为什么那样不行
www_123du_com 2006-07-13
  • 打赏
  • 举报
回复
//这句删除:private static System.Threading.Mutex CASLogmutex = new System.Threading.Mutex(false,"CASLogmutexName");

public class WriteLog
{
public WriteLog()
{
}

public static void WriteCASLog(string message)
{
string file=Global.ServerFilePath+"LogFile\\CAS\\"+DateTime.Now.ToShortDateString()+".txt";
string message1=DateTime.Now.ToString()+" : "+message+"\r\n";
System.Threading.Mutex CASLogmutex = new System.Threading.Mutex(false,"CASLogmutexName");
CASLogmutex.WaitOne();
WriteLog.WriteMessageToText(file,message1);
CASLogmutex.ReleaseMutex();
}

public static void WriteCASLogAndThrowException(string message)
{
string file=Global.ServerFilePath+"LogFile\\CAS\\"+DateTime.Now.ToShortDateString()+".txt";
string message1=DateTime.Now.ToString()+" : "+message+"\r\n";
System.Threading.Mutex CASLogmutex = new System.Threading.Mutex(false,"CASLogmutexName");
CASLogmutex.WaitOne();
WriteLog.WriteMessageToText(file,message1);
CASLogmutex.ReleaseMutex();

throw new Exception("CAS管理器返回异常:"+message);
}
}
scsq 2006-07-13
  • 打赏
  • 举报
回复
"按 mutex的例子我的应该是可以的

但现在不行 请各位再看看 究竟是什么地方出错了"
---------------------------------------------------------
"应该"如果有用,那么CSDN的技术论坛就没有用了!


火气太旺了点嘛 我现在就是想弄明白mutex为什么不行
scsq 2006-07-13
  • 打赏
  • 举报
回复
第一步 删除 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
目录下相关的虚拟目录的临时文件
第二步 重启IIS 在dos 输入 iisreset

第三步 在IE 输入虚拟目录的地址,访问虚拟目录

第四步 打开项目,应该可以用啦。。
难道必须要删除临时文件才有用
scsq 2006-07-13
  • 打赏
  • 举报
回复
问题解决了就给分呀 我还没弄清楚要继续请教各位
laohan8849 2006-07-13
  • 打赏
  • 举报
回复
给分吧
laohan8849 2006-07-13
  • 打赏
  • 举报
回复
这个同我机子上的问题一样。。。应该叫是完全样。。。
laohan8849 2006-07-13
  • 打赏
  • 举报
回复
第一步 删除 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
目录下相关的虚拟目录的临时文件
第二步 重启IIS 在dos 输入 iisreset

第三步 在IE 输入虚拟目录的地址,访问虚拟目录

第四步 打开项目,应该可以用啦。。
www_123du_com 2006-07-13
  • 打赏
  • 举报
回复
"按 mutex的例子我的应该是可以的

但现在不行 请各位再看看 究竟是什么地方出错了"
---------------------------------------------------------
"应该"如果有用,那么CSDN的技术论坛就没有用了!
www_123du_com 2006-07-13
  • 打赏
  • 举报
回复
"用lock肯定是不行的"
------------------------------------------------------------
你晓得个狗屁!随便乱否定别人的!

试了再说lock不行好不好?

mutex的优势是命名mutex可以进程同步(当然要以性能作代价),lock只能在进程内做到线程同步。谁说lock只能对一处代码同步?

你这种情况完全是lock就可以解决的,你还瞧不起lock是不是?mutex在这里除了性能差点没什么别的不同!
scsq 2006-07-12
  • 打赏
  • 举报
回复
帮忙看看呀
加载更多回复(13)
#### 收益: 学习《optee系统开发精讲 》套餐的收益如下:1、全体系的掌握optee的核心知识点(多核多线程、启动流程、各类API、TA/PTA/STA、driver、service、各类设计思想、内存管理、中断管理...);2、掌握TEE OS的设计核心思想(不限与optee,对其它TEE也是如此),能够进入软件架构层次的各项设计;3、快速熟悉大系统软件的各项组件,能够进行大系统软件之间的设计或排查问题4、学习和理解理解Armv8/Armv9架构、Trustzone架构5、技术水平提升N个level, 掌握快速的学习方法;#### 课程简介和大纲 该课程包含但不限与以下章节:optee的组件介绍optee os启动流程optee os的初始化流程optee os线程向量表及其作用进入optee os的八种方式optee os的异常向量表和设计模型optee os对irq中断的处理optee os对fiq中断的处理optee os的内存管理optee os的MMU的使用optee os的根密钥(信任根)optee os的RPC机制optee os的存储系统optee os的SFS系统optee os的RPMB机制的实现optee os的Timer实现optee os中实现的GP APIoptee os中的系统调度optee os中密码学函数的支持optee os中的线程调度CA/TA的开发模型optee os中的serviceoptee os中的 PTAoptee os中的 secure driveroptee os中的 Early TAoptee中spinlock的实现原理详解optee中mutex的实现方式optee的栈指针和栈内存的介绍optee中使用虚函数(平台客制化)的设计模型共享内存的介绍optee os的标准错误码TA的签名和验签TA链接静态库的方法

110,500

社区成员

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

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

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