单例模式,有“懒汉式”和“饿汉式”两种。 懒汉式 单例类的实例在第一次被引用时候才被初始化。 饿汉式 单例类的实例在加载的时候就被初始化。 在单线程程序中,上面两种形式基本可以满足要求了,但是在多线程环境下,单例类就有可能会失效,这个时候就要对其加锁了,来确保线程安全。 对线程加锁用的synchro ...
分类:
其他好文 时间:
2017-11-02 21:09:15
阅读次数:
170
拓展 ycgwl-cache RedisStorage base-dev-service-impl 添加 RedisLock 原始方法改私有 新添加加锁接口 ...
分类:
其他好文 时间:
2017-11-02 20:01:37
阅读次数:
146
1 n个台阶,每次3或5步,有多少种走法 2 mysql myISAM和innodb区别: myisam 不支持事务,强调性能,innodb提供事务支持及外键和行级锁等高级数据库功能。 上述三种锁的特性可大致归纳如下:1) 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发 ...
分类:
其他好文 时间:
2017-11-02 18:16:20
阅读次数:
146
1 实现方式 分布式锁的实现,目前比较常用的有以下几种方案: 2 基于Zookeeper实现实现分布式锁 实现原理是: 每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。 ...
分类:
其他好文 时间:
2017-11-01 19:39:35
阅读次数:
131
对于多线程访问同一变量是否需要加锁的问题,先前大家都讨论过。今天用代码验证了一下之前的猜想:32位CPU与内存的最小交换数据为4字节/次,这也是结构体要对齐4字节的原因。在物理上,CPU对于同一4字节的内存单元,不可能写2个字节的同时,又读了3字节。测试环境为:XEON 2CPU*2Windows7 ...
分类:
编程语言 时间:
2017-10-28 22:08:41
阅读次数:
287
(shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化。 shared_ptr 的线程安全级别和内建类型、标准库容器、std::string 一样,即: ? 一个 shared_ptr 对象实体可被多个线程同时读取(文 ...
分类:
编程语言 时间:
2017-10-28 22:04:27
阅读次数:
386
对于多线程访问同一变量是否需要加锁的问题,先前大家都讨论过。今天用代码验证了一下之前的猜想:32位CPU与内存的最小交换数据为4字节/次,这也是结构体要对齐4字节的原因。在物理上,CPU对于同一4字节的内存单元,不可能写2个字节的同时,又读了3字节。测试环境为:XEON 2CPU*2Windows7 ...
分类:
编程语言 时间:
2017-10-28 21:06:50
阅读次数:
254
概述 ConcurrentLinkedQueue是一种基于链表实现的无界非阻塞线程安全队列,遵循先入先出规则。 线程安全队列有两种实现方式: 阻塞方式:对入队和出队操作加锁。阻塞队列。 非阻塞方式:通过自旋CAS实现。例如:ConcurrentLinkedQueue 下面从源代码中分析Concurr ...
分类:
编程语言 时间:
2017-10-25 00:42:15
阅读次数:
288
在InnoDB加锁前,为什么要先start transaction innodb下锁的释放在事务提交/回滚之后,事务一旦提交/回滚之后,就会自动释放事务中的锁,innodb默认情况下autocommit=1即开启自动提交 检索条件使用索引和不使用索引的锁区别: 检索条件有索引的情况下会锁定特定的一些 ...
分类:
数据库 时间:
2017-10-24 21:03:05
阅读次数:
192
提到sql server,想必最让人头疼的当属锁机制了。在默认的read committed隔离模式下,连最基本的select操作都要申请各种粒度的锁,而且在读取数据过程中会不断有锁升级、转化。在非未提交读的隔离级别中,一个select操作会对每一条读到的记录或键值加S锁(何时释放还要视记录是否返回 ...
分类:
数据库 时间:
2017-10-24 17:22:22
阅读次数:
231