一个星期前,我写了关于SQL Server里闩锁(Latches)和自旋锁(Spinlocks)的文章。2个同步原语(synchronization primitives)是用来保护SQL Server里的共享数据结构,例如缓存池里的页(通过闩锁(Latches)),锁管理器哈希表里的锁(通过自旋锁...
分类:
其他好文 时间:
2015-08-01 08:50:26
阅读次数:
147
无锁有序链表可以保证元素的唯一性,使其可用于哈希表的桶,甚至直接作为一个效率不那么高的map。普通链表的无锁实现相对简单点,因为插入元素可以在表头插,而有序链表的插入则是任意位置。
本文主要基于论文High Performance Dynamic Lock-Free Hash Tables实现。
主要问题
链表的主要操作包含insert和remove,先简单实现一个版本,就会看到问题所在,以...
分类:
其他好文 时间:
2015-05-05 21:59:41
阅读次数:
195
接上篇使用RCU技术实现读写线程无锁,在没有GC机制的语言中,要实现Lock free的算法,就免不了要自己处理内存回收的问题。
Hazard Pointer是另一种处理这个问题的算法,而且相比起来不但简单,功能也很强大。锁无关的数据结构与Hazard指针中讲得很好,Wikipedia Hazard pointer也描述得比较清楚,所以我这里就不讲那么细了。
一个简单的实现可以参考我的gith...
分类:
其他好文 时间:
2015-05-03 22:11:14
阅读次数:
158
Michael-Scott非阻塞队列算法,即MS-queue算法,是1 9 9 6 年由Maged . M .Michael and M. L. Scott提出的,是最为经典的并发FIFO队列上的算法,目前很多对并发FIFO队列的研究都是基于这个算法来加以改进的。在共享内存的多核处理器上,这种基于C...
分类:
编程语言 时间:
2015-04-24 23:56:56
阅读次数:
1878
ConcurrentLinkedQueue是一个基于单链表的无界线程安全队列,该队列是FIFO的。ConcurrentLinkedQueue/ConcurrentLinkedDeue和LinkedBlockingQueue/LinkedBlockingDeue
相比,不同点在于它们不提供阻塞功能,并且是Lock-Free的,而后者则是利用ReentrantLock实现的。...
分类:
其他好文 时间:
2015-04-14 19:50:08
阅读次数:
312
关键词:
no-lock interlocked lock-free tcp/ip server engine iocp server out-of-orderexecution
无锁 原子锁 原子操作 原子指令 锁无关 开放锁 通讯服务器 引擎 高并发 大数据 搜索引擎 完成端口服务器 cpu乱序并行执行 内存栅栏
IOKING MsgEngine无锁消息引擎(no-loc...
分类:
其他好文 时间:
2015-04-09 21:56:40
阅读次数:
205
[c实现的队列](http://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue) 下面是akka实现的一个MPSC队列。 PS: 代码中注释对链头链尾判定的标准是添加的元素所在的位置...
分类:
其他好文 时间:
2015-03-02 11:28:32
阅读次数:
338
无锁编程以及CAS无锁编程 / lock-free / 非堵塞同步无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被堵塞的情况下实现变量的同步,所以也叫非堵塞同步(Non-blocking Synchronization)。实现非堵塞同步的方案称为“无锁编程算法”(Non-bl...
分类:
其他好文 时间:
2015-02-18 11:48:49
阅读次数:
198
上一篇分析了 Sinclair 的 q3.h 的原理,以及根据网友 korall 的提醒,我们可以看到,q3.h 的 push() 前半部分领号的过程是 lock-free 的,这里 lock-free(无锁) 的定义是指假如有一个线程在领号的过程中被无限休眠或崩溃(假设存在崩溃的可能性),也不会造...
分类:
其他好文 时间:
2015-01-08 14:59:25
阅读次数:
255