基本信息
源码名称:C# lock 示例源码解析
源码大小:1.14KB
文件格式:.txt
开发语言:C#
更新时间:2014-09-30
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


不摆大理论,理论的大是大非自己去MSDN研读。
lock就是把{}中的代码段锁定,防止多个线程同时运行该代码段。
用法:
private void Do()
{
threat t1=new threat(doSomething);
threat t2=new threat(doSomething);
t1.Start();
t2.Start();
}

object locker=new object();
private void doSomething()

{
...........
.........
lock(locker)
{
FunLog() ;

}
........
}

比如说上面这样,当t1执行到lock时,检测发现locker不在锁定列表中,它会记录locker的内存地址,加入到锁定列表,并开始执行lock的锁定代码段;t2再执行到lock时,检测发现locker的内存地址是在锁定列表中的,于是线程等待;t1执行完FunLog到达lock结尾,将locker地址从锁定列表删除;t2检测发现locer已不在锁定列表中,它会记录locker的内存地址,加入到锁定列表,并进入执行lock的代码段。
追问
lock(...) 括号里面的内容必须是 object 吗
回答
lock(...)括号里的内容应该是一种引用类型,C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

因此
  class A
    {
    }
struct S
{
}
int i;
object o;
string str;
A a=new A();
S s=new S();
lock(i){}//错误
lock(o){}//正确
lock(str){}//正确
lock(a){}//正确
lock(s){}//错误