接上篇使用RCU技术实现读写线程无锁,在没有GC机制的语言中,要实现Lock free的算法,就免不了要自己处理内存回收的问题。
Hazard Pointer是另一种处理这个问题的算法,而且相比起来不但简单,功能也很强大。锁无关的数据结构与Hazard指针中讲得很好,Wikipedia Hazard pointer也描述得比较清楚,所以我这里就不讲那么细了。
一个简单的实现可以参考我的gith...
分类:
其他好文 时间:
2015-05-03 22:11:14
阅读次数:
158
对无锁队列的最初兴趣来自梁斌同志的一个英雄帖:http://coderpk.com/。第一次看到这个题目的时候还不知道CAS,FAA等所谓的“原子操作”,但直觉上感觉,通过对读写操作的性能优化来达到大幅提高队列性能的方法是行不通的,就算读写操作全用汇编来写,也不会和正常的read及write有数量级...
分类:
编程语言 时间:
2015-04-26 10:42:57
阅读次数:
398
一哥们翻译的boost的无锁队列的官方文档原文地址:http://blog.csdn.net/great3779/article/details/8765103Boost_1_53_0终于迎来了久违的Boost.Lockfree模块,本着学习的心态,将其翻译如下。(原文地址:http://www.b...
分类:
其他好文 时间:
2015-04-25 16:36:13
阅读次数:
142
1.9 再论shared_ptr 的线程安全虽然我们借shared_ptr 来实现线程安全的对象释放,但是shared_ptr 本身不是100% 线程安全的。它的引用计数本身是安全且无锁的,但对象的读写则不是,因为shared_ptr 有两个数据成员,读写操作不能原子化。根据文档11,shared_...
分类:
编程语言 时间:
2015-04-22 19:58:04
阅读次数:
137
在一个系统中有一个写线程和若干个读线程,读写线程通过一个指针共用了一个数据结构,写线程改写这个结构,读线程读取该结构。在写线程改写这个数据结构的过程中,加锁情况下读线程由于等待锁耗时会增加。
可以利用RCU (Read Copy Update
What is rcu)的思想来去除这个锁。本文提到的主要实现代码:gist
RCU
RCU可以说是一种替代读写锁的方法。其基于一个事实:当写线程...
分类:
编程语言 时间:
2015-04-19 19:31:28
阅读次数:
175
ConcurrentLinkedQueue是一个基于单链表的无界线程安全队列,该队列是FIFO的。ConcurrentLinkedQueue/ConcurrentLinkedDeue和LinkedBlockingQueue/LinkedBlockingDeue
相比,不同点在于它们不提供阻塞功能,并且是Lock-Free的,而后者则是利用ReentrantLock实现的。...
分类:
其他好文 时间:
2015-04-14 19:50:08
阅读次数:
312
SkipList介绍
1. SkipList(跳表),在理论上能够在O(log(n))时间内完成查找、插入、删除操作。SkipList是一种红黑树的替代方案,由于SkipList与红黑树相比无论从理论和实现都简单许多,所以得到了很好的推广。SkipList是基于一种统计学原理实现的,有可能出现最坏情况,即查找和更新操作都是O(n)时间复杂度,但从统计学角度分析这种概率极小。使用SkipL...
分类:
其他好文 时间:
2015-04-13 19:01:10
阅读次数:
350
关键词:
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
/*
* RingBuf.h
*
* Created on: Feb 7, 2015 6:06:10 PM
* Author: xuzewen
*/
#ifndef RINGBUF_H_
#define RINGBUF_H_
#include
/**
*
* 多/单线程生产, 只能单线程消费, 尺寸固定为0x10000.
*
* */
class RingBu...
分类:
其他好文 时间:
2015-03-20 14:29:16
阅读次数:
206
共享内存现在使用环形队列,以前使用boost的那一套,难以看懂,现在直接改成环形队列简单多了,将环形队列的头和尾放入共享内存中,也是安全的和内存池的实现差不多,都是先分配好,然后放入队列中,只是这个是环形队列,而那个是无锁队列,具体哪个队列的效率高,个人感觉还是环形队列的效率高然后再外层再搞个环形队...
分类:
其他好文 时间:
2015-03-18 12:02:06
阅读次数:
124