• 本站域名:OceanCoder.cn 若您喜欢本站,请添加至收藏夹!
  • 网站少部分资源来源自网络,如有侵犯您的权益,请联系站长删除!
  • 本站所有文章,除特殊标明外,皆为本人原创,转载请注明出处,谢谢合作!
  • 本站所下载的资源,若无特殊说明,使用统一解压密码:oceancoder.cn
  • 本站已实现布局自适应,支持手机端、pad端访问,欢迎体验
  • 本站部分资源可通过微信公众号留言获取,欢迎体验

[C#]关于lock的理解

C# OceanCoder 2017-07-19 3842 次浏览 0个评论

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的代码段。

已有 3842 位网友参与,快来吐槽:

发表评论