`

深度理解lock

 
阅读更多
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->lock (thisLock)
{
    
// Critical code section
}

thisLock 应该是引用类型,但(object)1 将不会真正起到作用。因为进入lock 代码块时会在 thisLock中加入一个标示符。只要在这个thisLock中有一个标示符其
他线程就会一直等待,直到加锁线程取消标示符。(object)1 虽然是一个对象,但是当另一线程执行到lock((object)1)时会重新装箱生成一个匿名对象。

(object)1 类似于:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public void a()

 
object thisLock = new Object();
 
lock(thisLock)
 {

 }
}

而不是:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->class ClassA
{
 
object thisLock = new Object();
public void a()
{
 
lock(thisLock)
 {
 }
}
}

并且:

通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)lock (typeof (MyType))lock ("myLock") 违反此准则:

  • 如果实例可以被公共访问,将出现 lock (this) 问题。

  • 如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。

  • 由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。

以上引用自MSDN。
上面列的三条,我认为严重程度是越来越深的。
1. lock (this) 可能会有问题,因为不受控制的代码也可能会锁定该对象。这可能导致死锁,即两个或更多个线程等待释放同一对象。
2.线程同步就像是上厕所,你在上厕所前都贴一块牌"有人在上厕所,请等待".(有lock的地方就是厕所,你的牌也总是贴到厕所上,不只是你自家的那就必然是公共的)lock (typeof (MyType))刚好就贴在公共厕所(应该是别人家的厕所)上了,那不是害人吗(另一个厕所也是lock (typeof (MyType)),如果你能保证 别的地方永远不用lock (typeof (MyType))那道无所谓了).
3.在整个应用程序中"myLock"都会引用到同一个示例。为了避免别人也和你使用同样的对象实例最好用一个私有对象。


分享到:
评论

相关推荐

    C#面试技术题深度理解

    在C#面试中,深度理解技术是至关重要的,这不仅要求掌握基础语法,还涉及到高级特性和编程实践。本文将围绕“C#面试技术”和“深度理解”这两个主题,探讨一些关键知识点。 1. **面向对象编程**:C#是一种强类型、...

    LockService,安卓6.0.zip

    为了更好地理解LockService,我们可以参考开源项目LockService-master。这个项目通常包含了完整的LockService实现,包括源代码、布局文件和资源。通过阅读和研究这些代码,开发者可以学习如何构建一个功能完备且...

    电脑键盘上的Scroll Lock是什么用的.doc

    尽管`Scroll Lock`键在当今的日常使用中并不常用,但它仍然是键盘布局的一部分,对于了解计算机历史和技术演变的用户来说,理解它的功能仍然是有意义的。此外,对于Excel等特定应用的深度用户,掌握这个键的用途可以...

    潮5000 CFG Lock 解锁工具包.zip

    在深入探讨这个工具包之前,我们首先需要理解什么是CFG Lock以及它在计算机系统中的作用。 CFG Lock(Configuration Guard Lock)是一种由Intel引入的安全特性,主要在BIOS(基本输入输出系统)级别实施。它的目的...

    Python应用实战:python多线程-多线程安全问题&lock与rlock.zip

    如果使用普通的锁,当递归深度增加时,可能会导致死锁。 总的来说,理解并正确使用锁和可重入锁是解决Python多线程安全问题的关键。在编写多线程程序时,合理地引入锁机制可以防止数据竞争,确保程序的正确性。但...

    iphone lockinfo软件编程代码

    《深入解析iPhone Lock...ZTLockInfo作为Lockinfo的一部分,是开发者根据用户需求定制的个性化功能实现,它的设计与实现揭示了iOS开发的深度与广度。理解并掌握这些知识点,将有助于提升你在iOS个性化领域的专业技能。

    Java深度历险_Java深度历险

    《Java深度历险》这本书是Java开发者的一本深入学习指南,它涵盖了Java编程语言的核心概念、高级特性以及实际开发中的应用技巧。通过本书,读者可以系统地了解Java的各个方面,从而提升自己的编程技能和问题解决能力...

    50个有深度的java编程题目

    Java编程语言作为世界上最受...以上只是部分可能涉及的Java编程面试知识点,实际上,题目可能还会涵盖更多高级话题,如并发编程的深度理解、NIO、JMX、JPA、MyBatis等。熟练掌握这些知识点,将有助于在面试中表现出色。

    Java常见笔试、面试题目深度剖析

    5. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口、synchronized关键字、volatile、Lock接口等,以及线程通信(wait/notify,生产者消费者模式)。 6. **IO流**:Java的IO系统是处理输入...

    JAVA深度历险(PDF格式)

    此外,还会涉及线程同步和并发编程,这是多核处理器时代必备的知识,学习如何正确地使用synchronized、wait/notify、Lock接口等工具,能够有效提升程序的并行处理能力。 接着,王森老师会带领读者进入Java集合框架...

    PyPI 官网下载 | django-distributedlock-0.4.0.tar.gz

    《Django分布式锁库django-distributedlock的深度解析》 在Python后端开发领域,Django框架因其高效、稳定及强大的功能而广受开发者青睐。然而,在多线程或多进程环境中,为了保证数据的一致性和安全性,我们经常...

    SVN冲突深度解析完整版

    SVN冲突深度解析完整版 在本篇文章中,我们将深入探讨SVN冲突的原因、解决方法和详细解释。我们将从svn提交时出现的错误信息开始,逐步剖析SVN的工作机制和锁定机制,从而解决SVN冲突问题。 首先,让我们来看一下...

    风中叶 Java常见笔试、面试题目深度剖析Java 笔试 面试 题目

    在现代软件开发中,多线程是必不可少的,理解线程生命周期、同步机制(synchronized、Lock等)、并发工具类(ExecutorService、Semaphore等)的使用,以及如何避免和解决线程安全问题,都是面试中的热门话题。...

    JVM虚拟机深度讲解

    《JVM虚拟机深度讲解》这本书是JAVA开发者深入理解JVM的重要参考资料,它全面而详尽地探讨了Java虚拟机的工作原理与优化技巧。通过阅读本书,开发者可以大幅提升对JVM的理解,从而在编程实践中更好地驾驭这个强大的...

    Java深度历险

    《Java深度历险》将介绍线程的创建与同步,包括synchronized关键字、volatile变量、Lock接口以及并发工具类如Semaphore、CountDownLatch等。 网络编程也是Java的一大强项,书中会涵盖套接字编程、HTTP协议处理,...

    ReentrantLock代码剖析之ReentrantLock_lock

    在本文中,我们将深入分析`ReentrantLock`的`lock()`方法,理解其内部机制,包括锁的获取、释放以及公平性和非公平性的实现。 首先,`ReentrantLock`的`lock()`方法很简单,它只是调用了内部类`Sync`的`lock()`方法...

    java深度历险4

    学习如何创建和管理线程,理解同步机制(如synchronized关键字、Lock接口)以及并发工具(如Semaphore、CountDownLatch),是成为高级Java开发者的必备知识。 此外,异常处理、IO流、网络编程、反射等也是Java深度...

    组合加密软件包 Lock Manage 5.0(c++源码)

    《Lock Manage 5.0:C++组合加密技术深度解析》 Lock Manage 5.0是一款基于C++语言开发的组合加密软件包,其源代码的开放为开发者提供了深入理解加密算法及其应用的宝贵资源。该软件包的核心在于其独特的组合加密...

Global site tag (gtag.js) - Google Analytics