基本信息
源码名称:C# lock 示例源码解析
源码大小:1.14KB
文件格式:.txt
开发语言:C#
更新时间:2014-09-30
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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){}//错误