C++对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分。对于各种支持的底层实现机制。 单继承(父类含虚函数) 输出:基类指针p在运行时发生动态绑定,fun2调用子类方法,fun1由于没有virtual,仍然调用父类方法 内存模型: 指针的虚表指向子类方法地址 当一个 ...
分类:
编程语言 时间:
2016-08-06 17:26:02
阅读次数:
189
数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争。java 内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正 ...
分类:
编程语言 时间:
2016-08-06 17:24:04
阅读次数:
185
并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写 ...
分类:
编程语言 时间:
2016-08-06 00:32:41
阅读次数:
324
Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很多,该语言针对多种异构平台的平台独立性而使用的多线程技术支持也是具有开拓性的一面,有时候在开发Java同步和线程安全要求很严格的程序时,往往容易混淆的一个概念就是内存模型。究竟什么是内存模型?内存模型描述了 ...
分类:
编程语言 时间:
2016-08-06 00:26:12
阅读次数:
267
基础 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间 ...
分类:
编程语言 时间:
2016-08-05 19:45:03
阅读次数:
286
数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将会被改变。 前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时,会遵守数据依赖性,编译 ...
分类:
编程语言 时间:
2016-08-05 19:43:08
阅读次数:
228
block即代码块,和其他属性类似,只是block存储的是函数体。block执行的代码,是在编译时已经生成好的了。首先来看一下block的内存模型: isa 指针, 所有对象都有改指针,用于实现对象相关的功能。 flags,用于按bit位表示一下block的附加信息。 reserved,保留变量。 ...
分类:
其他好文 时间:
2016-08-05 17:36:26
阅读次数:
255
1,volatile
它所修饰的变量不保留拷贝,直接访问主内存中的。
在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。...
分类:
其他好文 时间:
2016-08-05 10:16:48
阅读次数:
112
JAVA通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,每个线程又单独地有自己的工作内存,当线程与内存区域进行交互时,数据从主存拷贝到工作内存,进而交由线程处理。 一、JVM逻辑内存模型的构成 1.1 程序计数器 Program Counter Regis... ...
分类:
其他好文 时间:
2016-08-05 00:32:32
阅读次数:
108
一、非原子的64位操作: 当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值,这种安全性保证被称为最低安全性。最低安全性适用于绝大多数变量,但存在一个例外:非volatile类型的64位数值变量(double,long),Java内存模型 ...
分类:
编程语言 时间:
2016-08-02 08:54:58
阅读次数:
211