`
kingquake21
  • 浏览: 268985 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DCL和happens-before的学习资料

阅读更多

Lucas Lee的修正(这里是原帖):

Java代码

我认为这个修正是可以的,假设A线程在B线程之前进入同步块,B线程会看到hasInitialized =0 或者=1这两种情况,=0时是没问题的,就不多说了,当B线程看到hasInitialized =1时的情况分析

A:LazySingleton.getInstance();

B:LazySingleton.getInstance().getSomeField();

1. 根据happens-before的单线程原则,在A线程中,(1)->(7)->(B1)

2. B线程看到hasInitialized =1时,此时A线程的(B1)->B线程的(4),而在B线程中的getSomeField是在getInstance之后,也有getInstance->getSomeField这个偏序关系

3. 根据happens-before的传递性,(1)->(7)->(B1)>B线程的(4)->B线程的getSomeField

不知道我这么分析是不是对的?

主要问题就在于,线程A在内存中若能观察到hasInitialized=1是不是意味着线程A在内存中能观察到构造完全的instance实例,因为在JLS中提到

• If x and y are actions of the same thread and x comes before y in program

order, then hb(x, y).

如果上面的假设成立,线程A观察到hasInitialized=1时,instance就已经完全构造好了

而且线程B要想观察到hasInitialized=1,应该也是在线程A观察到hasInitialized=1之后

几天后,看了些资料,加深了对reorder和happens-before的理解

继续上面的分析,线程A在内存中若能观察到hasInitialized=1意味着线程A在内存中能观察到构造完全的instance实例,

但是,我理解的,happens-before规则只有涉及到对同一内存数据的读写才有意义,象线程A中的(B1)和(7)是没有这个关系才对

例如:在下面程序中,假设a、b都没有同步

a = 3;

b = 4;

那么,编译器就可能将这两句重新排序,因为compilers are allowed to reorder the instructions in either thread,

when this does not affect the execution of that thread in isolation.(JSL)happens-before关系对于这两句根本没有意义

用happen-before规则重新审视DCL:http://www.javaeye.com/topic/260515

http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

http://www.ibm.com/developerworks/java/library/j-dcl.html

http://www.ibm.com/developerworks/java/library/j-threads1.html

http://www.ibm.com/developerworks/java/library/j-threads2.html

http://www.ibm.com/developerworks/java/library/j-threads3.html

分享到:
评论

相关推荐

    DCL-33A资料说明书

    根据提供的文件信息,我们可以提取并总结出关于DCL-33A指示控制器的相关知识点: ### DCL-33A 指示控制器介绍 #### 一、产品概述 DCL-33A是一款用于安装在导轨上的指示控制器,其设计符合一定的规格要求。该控制器...

    数据控制语言(DCL-Data-Control-Language)-2(常用版).doc

    数据控制语言(DCL,Data Control Language)是SQL语言的重要组成部分,主要负责管理和控制数据库的访问权限和安全。在SQL Server 2000中,DCL被用来设定或修改数据库用户或角色的权限,确保数据的安全性和访问的可...

    DCL-Chat-Client:Websocket客户端

    综上所述,DCL-Chat-Client项目涵盖了WebSocket技术、JavaScript编程、事件驱动、前端框架、数据格式、安全性和性能优化等多个方面,是一个完整的实时通信解决方案。开发者在实现这样的客户端时,需要具备扎实的前端...

    autocad完全应用指南.autolisp+dcl+visuallisp程序设计篇(2011年4月第一版).part3.rar

    语言生动风趣,零压力的阅读享受和学习体验 AutoLISP+DCL+VisualLISP是AutoCAD二次开发的最佳搭档 最新的AutoLISP+DCL+VisualLISP二次开发技术,提高工作效率 《autocad完全应用指南.autolisp+dcl+visuallisp程序...

    dcl306-2020-jun-01:DCL-306

    **描述解析:** "DCL-306:开发Reactjs应用程序" 描述进一步证实了这个资源与学习如何使用React.js来构建应用程序有关。它提到了这是一个培训项目的一部分,并提供了完整的培训目录链接,但实际链接并未提供。这表明...

    dcl-ecs-quests:Decentraland库,用于创建要在UI中显示的ECS组件的任务

    dcl-ecs-quests:Decentraland库,用于创建要在UI中显示的ECS组件的任务

    dcl350-2021-mar-15:DCL-350

    DCL-350:使用Spring Cloud实施MicroService体系结构这些项目是作为以下培训的一部分而创建的:DCL-350:使用Spring Cloud实施MicroService体系结构请点击完整培训目录的链接: : Kurulum Bilgisi: Eğitimde实验室...

    opendcl_OPENDCL_opendcl预览_opendcl_viewdcl_lispdcl_源码

    在AutoCAD环境中,DCL(Dialog Control Language)文件是一种用于创建和定制用户界面对话框的文件格式。这些文件包含了对话框的设计布局,包括控件的位置、大小、样式以及与之关联的事件处理代码。OPENDCL是AutoCAD...

    DCL对话框自学教程

    ### DCL对话框自学教程知识点总结...通过以上内容,我们可以了解到DCL对话框自学教程不仅覆盖了对话框编程的基础知识,还详细介绍了各种组件的使用方法和技术要点,对于希望掌握这一技能的学习者来说是一份宝贵的资源。

    dcl112-2021-apr-05:DCL-115

    【标题】"DCL-115:2021年4月5日 C++ 14面向对象编程实践" 【描述】中的“DCL-115:使用C++ 14的面向对象编程”是指一个特定的培训课程,该课程专注于利用C++ 14标准进行面向对象编程(OOP)的实践。面向对象编程是...

    dcl306-2021-apr-19:DCL-306

    总之,"DCL-306"课程旨在提供一个全面的React开发学习路径,涵盖了从基础到进阶的各个知识点,帮助开发者熟练掌握React及其相关技术栈,构建高效、可维护的Web应用。通过实践这些项目,你将能够应对各种复杂的前端...

    DCL防爆系列电动执行机构选型手册.pdf

    从提供的文件信息中,我们无法获取到具体的技术内容,仅能得知文件标题和描述指向了一份关于“DCL防爆系列电动执行机构”的选型手册。这份手册被归类在“综合资料”标签下。由于提供的【部分内容】是一串数字和一些...

    cobol学习例子(包含DCL脚本

    在这个“COBOL学习例子(包含DCL脚本)”压缩包中,我们可以找到一系列关于如何使用COBOL和DCL的实践教程。这些例子将帮助初学者理解和掌握这两种技术的核心概念。 1. **COBOL基础**: COBOL的语法结构清晰,主要由...

    DCL1608SR10

    Product Description and Identification (Part Number) ...DCL Series of multi-layer chip inductors for choke. 2) Product Identification (Part Number) DCL ※※※※ 〇 XXX □ ◎ ① ② ③ ④ ⑤ ⑥

    dcl314-2021-mar-09:DCL-314

    DCL-314:使用Node.js,MongoDB和Knockout构建可伸缩Web应用程序这些项目是以下培训的一部分:“ DCL-314:使用Node.js,MongoDB和Knockout构建可伸缩Web应用程序” 请点击完整培训目录的链接: : 库鲁鲁姆·比尔吉...

    dcl350-2021-apr-12:DCL-350

    DCL-350:使用Spring Cloud实施MicroService体系结构 这些项目是作为以下培训的一部分而创建的:DCL-350:使用Spring Cloud实施MicroService体系结构 请点击完整培训目录的链接: : 安装信息: 为了安装教育中的...

    dcl202-2021-mar-01:DCL-202:Java SE 8编程

    DCL-202:Java SE 8编程 这些项目是作为以下培训的一部分而创建的:DCL-202“ Java SE 8编程” 请点击完整培训目录的链接: : 库鲁鲁姆·比尔吉西(Kurulum Bilgisi): Eğitimde实验室çalışmalarıICIN ...

    oracle学习笔记

    DBA (DATABASE Admin) 数据库管理员 DBS (DATABASE SYSTEM) 数据库系统 DBMS (DATABASE MANAGE ...数据控制语言(Data Control Langueage DCL)--- grant,revoke 事务控制(Transation Control)------ commit,rollback

    DCL32CE1通讯说明书

    日本神钢DCL32CE1通讯说明书主要涵盖了温控仪表DCL-33A的通信功能操作和注意事项。以下是详细的知识点总结: 1. **系统配置** - 当使用USB通讯线CMC-001-3(需单独购买)时,系统连接方式为:主机计算机通过USB...

Global site tag (gtag.js) - Google Analytics