首页 > 编程 > .NET > 正文

.NET 线程同步(2)

2024-07-10 13:00:19
字体:
来源:转载
供稿:网友
monitor类的tryenter()方法非常类似于enter()方法,他试图获得对象的独占锁,不过它不会象enter()方法那样暂停. 如果线程成功进入,则tryenter()方法返回true.
tryenter()有3种重载方法,其中两个都带有超时参数,表示等待锁定的时间.

using system;
using system.threading;

namespace monitortryenter
{
public class tryenter
{
public tryenter()
{
}

public void criticalsection()
{
bool b=monitor.tryenter(this,1000);
console.writeline("thread "+thread.currentthread.gethashcode()+" tryenter value "+b);
for(int i=1;i<=3;i++)
{
thread.sleep(1000);
console.writeline(i+" "+thread.currentthread.gethashcode()+" ");
}
monitor.exit(this);
}

public static void main()
{
tryenter a=new tryenter();
thread t1=new thread(new threadstart(a.criticalsection));
thread t2=new thread(new threadstart(a.criticalsection));
t1.start();
t2.start();
}
}
}
运行结果:



在可能发生竞争,但不希望线程睡眠某个未指定的时间时,就可以使用tryenter().

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表