我的一个类的一个方法,外部会调用,并且外部可能是多个,我希望互斥调用,如下:
public string GetResult(string commstr,int SocketNum,int ReceiveType)
{
lock(this)
{
......//相互斥的代码段
......
......
}
}
或者
public string GetResult(string commstr,int SocketNum,int ReceiveType)
{
try
{
Monitor.Enter(this)
......//相互斥的代码段
......
......
}
finally
{
Monitor.Exit(this);
}
}以上两种通过我测试发现,并没有实现互斥调用,为什么?
求助各位大哥,呵呵!
public string GetResult(string commstr,int SocketNum,int ReceiveType)
{
lock(this)
{
......//相互斥的代码段
......
......
}
}
或者
public string GetResult(string commstr,int SocketNum,int ReceiveType)
{
try
{
Monitor.Enter(this)
......//相互斥的代码段
......
......
}
finally
{
Monitor.Exit(this);
}
}以上两种通过我测试发现,并没有实现互斥调用,为什么?
求助各位大哥,呵呵!
http://blog.csdn.net/chengking/archive/2005/11/30/540644.aspx
public static Mutex mt=new Mutex(false)
......
......mt.WaitOne();
Thread.sleep(10);
...... //想互斥执行的程序段
......
mt.ReleaseMutex( );---------------
但是有一个严重问题:如果某一个外部用户的调用死了(即不能顺利退出),那么所有的外部调用都将得不到响应。这个问题很严重啊,一颗老鼠屎害一锅饭,老板肯定不允许的。呵呵,各位老大,帮忙啊!!
{
lock(syncroot)
{
......//相互斥的代码段
......
......
}
}
{
lock(syncroot)
{
......//相互斥的代码段
......
......
}
}
=========================
加上以后,获取这段代码很慢,1个外部进程测试时,基本是1秒才能获得一次,2个外部进程测试时,基本是2秒才能获得一次,。。
这好象太慢了吧?
那你测试一下执行这段代码一次需要花多少时间,没有并发的情况下
用mt=new Mutex(false)这种方法来实现互斥调用就没有这么慢,一称之内平均有三、四外部测试进程能获得执行权!我还是Mutex这种方法了!感谢各位大哥帮助!