
无锁化编程
风吹过的时光
别问我是谁,我只是个过客。
展开
-
关于CPU编程—无锁编程
Lock-free 算法通常比基于锁的算法要好:从其定义来看,它们是 wait-free 的,可以确保线程永远不会阻塞。 状态转变是原子性的,以至于在任何点失败都不会恶化数据结构。 因为线程永远不会阻塞,所以当同步的细粒度是单一原子写或比较交换时,它们通常可以带来更高的吞吐量。 在某些情况下,lock-free 算法会有更少的同步写操作(比如 Interlocked 操作),因此纯粹从性能转载 2014-05-06 16:35:59 · 2863 阅读 · 0 评论 -
Double Checked Locking 模式 -- 单例实现的多线程版本
之前在使用Double CheckLocking 模式时,发现自己还是不太理解。于是写个记录,其实很简单,一看就明白了。应用特别说明:1.Double Check Locking模式是singleton的多线程版本,如果是单线程则应使用singleton。2.Double Check Locking模式依就会使用锁——临界区锁定,不要以为可以避免使用锁。3.Double转载 2014-05-06 22:35:58 · 1434 阅读 · 0 评论 -
linux无锁化编程--__sync_fetch_and_add系列原子操作函数
__sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables__sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetch_and_add,顾名思义,原创 2014-05-06 14:33:32 · 75046 阅读 · 5 评论 -
无锁编程实战演练
前段时间研究过一阵子无锁化编程。刚写了几个简单的程序,来验证了下自己学到的一些概念。测试场景:假设有一个应用:现在有一个全局变量,用来计数,再创建10个线程并发执行,每个线程中循环对这个全局变量进行++操作(i++),循环加2000000次。所以很容易知道,这必然会涉及到并发互斥操作。下面通过三种方式来实现这种并发操作。并对比出其在效率上的不同之处。......通过编程测试及测试得出结论:1、如果是想用全局变量来做统计操作。而又不得不考虑多线程间的互斥访问的话,最好使用编译器支持的原子操作函原创 2014-05-14 22:55:58 · 8276 阅读 · 1 评论