找传奇、传世资源到传世资源站!

C# lock 示例源码解析

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

不摆大理论,理论的大是大非自己去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){}//错误

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复