我的代码如下:
该代码作为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起不了作用 还是经常出现同时访问同一个日志文件的情况,造成程序异常
该代码作为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起不了作用 还是经常出现同时访问同一个日志文件的情况,造成程序异常
解决方案 »
- 想在listbox中显示数据库中的内容,但总是显示不出来,求大神指教
- 请教sql语句拼接的问题
- 在C#中如何定义一个公用的结构体?
- 请问如何实本地文件与服务器文件的对比?
- 请问怎么设置label控件的文本右对齐呢?
- 判断数据库字段是否为空? 还有判断数据库字段是否是true和false
- 救命啊!!!急~c#sql在windows窗体中,想把gridview里的行显示在文本框里
- 如何得到从一个窗体中打开的子窗体数量(不是Mdi),就类似于Form.OwnedForms属性,而子窗体为设置为Owner属性。(内祥)
- 在WinForm 是否可以用 DataGrid 来绑定一列来显示图片
- 求救,急
- [oracle高手救命]关于一个oracle客户端10g,访问2个异地oracle服务器,字符集不同的问题。
- 求C#初学的书
static void Main()
{
Application.Run(new Form1());
}
// 定义私有变量。
public static Mutex m;
public Thread a;
public Thread b;
// 线程A。
public void ThreadA()
{
while(true)
{
Form1.m.WaitOne();
richTextBox1.Text += "A";
Form1.m.ReleaseMutex();
Thread.Sleep(10);
}
}
// 线程B。
public void ThreadB()
{
while(true)
{
Form1.m.WaitOne();
richTextBox1.Text += "B";
Form1.m.ReleaseMutex();
Thread.Sleep(30);
}
}
// 开始多线程。
private void button1_Click(object sender, System.EventArgs e)
{
m = new Mutex();
a = new Thread(new ThreadStart(this.ThreadA));
b = new Thread(new ThreadStart(this.ThreadB));
a.Start();
b.Start();
button1.Enabled = false;
}
// 结束多线程。
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
a.Abort();
b.Abort();
}
应该不会,我在webservice中写过类似的代码,运行好好的
实际上就会了 不过我定义了不只一个mutex
private static System.Threading.Mutex CASLogmutex = new System.Threading.Mutex(false,"CASLogmutexName");
private static System.Threading.Mutex CASLogmutex2 = new System.Threading.Mutex(false,"CASLogmutexName2");
多个类里定义: static Mutex m_Mutex = new Mutex() 会有什么问题?
名字不一样的就是另外一个互斥体,没有关系。
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完全没有任何关系。
lock (typeof(WriteLog))
{
WriteLog.WriteMessageToText(file,message1);
}互斥体对象针对同一个互斥体互斥,但你一直是用的同一个互斥体对象,这种做法本身就有问题。(不过我没试过!只觉得思路有问题。)
------------------------------------------------------------
你晓得个狗屁!随便乱否定别人的!试了再说lock不行好不好?mutex的优势是命名mutex可以进程同步(当然要以性能作代价),lock只能在进程内做到线程同步。谁说lock只能对一处代码同步?你这种情况完全是lock就可以解决的,你还瞧不起lock是不是?mutex在这里除了性能差点没什么别的不同!
---------------------------------------------------------
"应该"如果有用,那么CSDN的技术论坛就没有用了!
目录下相关的虚拟目录的临时文件
第二步 重启IIS 在dos 输入 iisreset第三步 在IE 输入虚拟目录的地址,访问虚拟目录第四步 打开项目,应该可以用啦。。
目录下相关的虚拟目录的临时文件
第二步 重启IIS 在dos 输入 iisreset第三步 在IE 输入虚拟目录的地址,访问虚拟目录第四步 打开项目,应该可以用啦。。
难道必须要删除临时文件才有用
---------------------------------------------------------
"应该"如果有用,那么CSDN的技术论坛就没有用了!
火气太旺了点嘛 我现在就是想弄明白mutex为什么不行
{
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);
}
}
是什么意思
http://blog.csdn.net/zhzuo/archive/2006/06/30/857405.aspx#sec3
你这里应该是WebService中的多个线程中使用mutex.