前面在《眉目传情之匠心独运的kfifo》一文中详细解析了 linux 内核并发无锁环形队列kfifo的原理和实现,kfifo鬼斧神工,博大精深,让人叹为观止,但遗憾的是kfifo为内核提供服务,并未开放出来。剑不试则利钝暗,弓不试则劲挠诬,鹰不试则巧拙惑,马不试则良驽疑,光说不练是不能学到精髓的,下面就动手实现自己的并发无锁队列UnlockQueue(单生产者单消费者)。...
分类:
其他好文 时间:
2014-10-11 19:11:36
阅读次数:
336
内存屏障,也称内存栅栏,内存栅障,屏障指令等, 是一类同步屏障指令,使得CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。来自一篇墙外的文章,写的非常好。...
分类:
其他好文 时间:
2014-10-09 02:08:38
阅读次数:
351
前段时间公司将一个软件平台从intel平台移植到loongson 3a平台,遇到了几个莫名奇妙的问题。现象是两次取内存的值不一样,场景基本上是两个进程共享内存,一个读,一个写。由于是应对国产化的潮流而进行的一个预研的项目,投入的时间不多,问题最后也没有解决。当时怀疑是cache alias的问题,因...
分类:
其他好文 时间:
2014-09-25 03:51:48
阅读次数:
265
A memory barrier, also known as a membar, memory fence or fence instruction, is a type of barrier instruction which
causes a central processing unit (CPU) orcompiler to
enforce an ordering constra...
分类:
其他好文 时间:
2014-09-02 14:13:54
阅读次数:
304
菜鸟学习并行编程,参考《C#并行编程高级教程.PDF》,如有错误,欢迎指正。背景有时候必须访问变量、实例、方法、属性或者结构体,而这些并没有准备好用于并发访问,或者有时候需要执行部分代码,而这些代码必须单独运行,这是不得不通过将任务分解的方式让它们独立运行。当任务和线程要访问共享的数据和资源的时候,...
分类:
编程语言 时间:
2014-09-01 17:16:03
阅读次数:
396
skynet 利用内置的原子操作来实现的一个读写锁,重点是理解 ”full memory barrier“ ,UNPv2 中利用互斥和条件变量实现的读写锁。前者是在硬件支持的情况下,显得简单明了,站的层次不一样。
源码贴出来:
struct rwlock {
int write;
int read;
};
static inline void
rwlock_in...
分类:
Web程序 时间:
2014-08-26 11:43:26
阅读次数:
284
gcc内嵌汇编简介 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。 1、简单的内嵌汇编 例: __asm_...
分类:
其他好文 时间:
2014-08-04 21:21:28
阅读次数:
329
说起屏障这个东西,相信对于大多数朋友来说比较陌生,不过要是说起pthread_join这个函数,相信都比较熟悉。我们通常使用这个函数来等待其它线程结束,例如主线程创建一些线程,这些线程去完成一些工作,而主线程需要去等待这些线程结束。其实pthread_join就实现了一种屏障。我们可以对屏障这样.....
分类:
编程语言 时间:
2014-07-31 20:21:37
阅读次数:
263
今天来说说 write barrier 。在 GC 的扫描过程中,由于分步执行,难免会出现少描了一半时,那些已经被置黑的对象又被修改,需要重新标记的情况。这就需要在改写对象时,建立 write barrier 。在扫描过程中触发 write barrier 的操作影响的对象被正确染色,或是把需要再染...
分类:
其他好文 时间:
2014-07-27 10:01:02
阅读次数:
309
大多数当前流行的Linux文件系统,包括EXT3和EXT4,都将文件系统barrier作为一个增强的安全特性。它保护数据不被写入日记。但 是,在许多情况下,我们并不清楚这些barrier是否有用。本文就为什么要在你的Linux系统上启用barrier做出了解释。Linux日志和barrier功能要理...
分类:
系统相关 时间:
2014-07-07 13:24:20
阅读次数:
202