我一直认为const表示一个常量,常量就是一个无法被修改的值,但是没有深入理解const的实现,甚至不知道mutable和volatile的存在,最近在书中看到了这一部分的知识,所以本文将详细解析这几个关键词。 首先考虑以下几个问题: 1. const int a和int const a的区别。 2... ...
分类:
编程语言 时间:
2017-07-23 22:37:17
阅读次数:
164
拉链算法总结大全: 一、0610算法(追加) 1、删除仓库表的载入日期是本次载入日期的数据,以支持重跑 delete from xxx where start_dt >=$tx_date; 2、创建暂时表,用于存放从源表中提取的数据 create multiset volatile table xx ...
分类:
编程语言 时间:
2017-07-22 20:58:26
阅读次数:
275
相关文章 Java并发编程(一)线程定义、状态和属性 Java并发编程(二)同步 Android多线程(一)线程池 Android多线程(二)AsyncTask源代码分析 前言 有时仅仅为了读写一个或者两个实例域就使用同步的话,显得开销过大,volatile关键字为实例域的同步訪问提供了免锁的机制。 ...
分类:
编程语言 时间:
2017-07-22 15:38:42
阅读次数:
238
一、volatile概述 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址(内存)中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出 ...
分类:
其他好文 时间:
2017-07-21 23:23:15
阅读次数:
263
下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引 ...
分类:
编程语言 时间:
2017-07-21 10:31:03
阅读次数:
276
众所周知,无限制下多线程操作共享变量是危险的,为了保证线程安全语义,一般的建议是在操作共享变量时加锁,比方说在用synchronized关键字修饰的方法内读写共享变量。 但是synchronized开销较大,有没有更轻量更优雅的解决方案呢? volatile是轻量级的synchronized,在正确 ...
分类:
编程语言 时间:
2017-07-20 21:05:34
阅读次数:
137
鼠篇写的基本都是理论基础,最近在研究Unsafe的源码,大致看了看,还没有太深入这篇牛篇,只能算是做个资源记录吧。 从AtomicInteger类源码看起来。 AtomicInteger源码部分: 这里比较神奇的是:unsafe.objectFieldOffset 这个方法,方法的参数是Field类 ...
分类:
编程语言 时间:
2017-07-20 18:53:28
阅读次数:
307
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/1358558 JNI是Java Native Interface的缩写,是Java平台的重要特性,使得Java代码可以 ...
分类:
移动开发 时间:
2017-07-19 15:31:35
阅读次数:
241
今天看ConcurrentQueue<T> 源码发现里面居然没有用到lock,我记得ConcurrentDictionary里面是有lock的,lock的是字典里面每一个key,但是ConcurrentQueue<T> 的线程安全确是用SpinWait对象和volatile关键字来实现,于是乎就温习 ...
1.volatile 关于volatile可讲述的部分有很多,不过精简的说这个关键字的功能有两点。 a.volatile修饰的变量对如果有修改,会对任意线程可见。 b.volatile修饰的变量: 如果是volatile写,那么它可以保证任何在它之前需要完成的读写都会完成,但是它之后的读写不能保证。 ...
分类:
编程语言 时间:
2017-07-17 23:53:20
阅读次数:
227