1.volatile 关于volatile可讲述的部分有很多,不过精简的说这个关键字的功能有两点。 a.volatile修饰的变量对如果有修改,会对任意线程可见。 b.volatile修饰的变量: 如果是volatile写,那么它可以保证任何在它之前需要完成的读写都会完成,但是它之后的读写不能保证。 ...
分类:
编程语言 时间:
2017-07-17 23:53:20
阅读次数:
227
Set表示一种没有反复元素的集合类,在JDK里面有HashSet的实现,底层是基于HashMap来实现的。这里实现一个简化版本号的Set,有下面约束: 1. 基于链表实现。链表节点依照对象的hashCode()顺序由小到大从Head到Tail排列。 2. 如果对象的hashCode()是唯一的。这个 ...
分类:
其他好文 时间:
2017-07-16 13:39:21
阅读次数:
196
如果不用OS提供的mutex,我们该如何实现互斥锁? 1. naive lock 最简单的想法是,搞一个volatile类型的共享变量flag,值可以是0(无锁)或者1(有锁),竞争线程监听flag,一旦发现flag为0,那么尝试cas更新flag为1,更新成功则说明占有了这个锁,更新失败说明临界区 ...
分类:
其他好文 时间:
2017-07-08 13:27:37
阅读次数:
303
Python的yield不但可以返回一个值,它还可以接收调用者发出的参数。 来看例子: 传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁。 如果改用协程,生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者 ...
分类:
编程语言 时间:
2017-07-06 20:33:41
阅读次数:
158
CAS无锁算法 要实现无锁(lock-free)的非阻塞算法有多种实现方法,其中CAS(比较与交换,Compare and swap)是一种有名的无锁算法。CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V ...
分类:
编程语言 时间:
2017-07-05 11:40:37
阅读次数:
176
锁是高性能程序的杀手,但是为了保证数据的一致性,在多线程的应用环境下又不得不加锁。但是在某些特殊的场景下, 是可以通过优化数据结构来达到无锁的目的。那么我们就来看一下如何实现一个无锁队列。 队列:众所周知,就是先进先出。 出队列的时候从队列头取出一个结点;入队列的时候,将结点添加到队列尾部。当多线程 ...
分类:
其他好文 时间:
2017-07-04 11:07:05
阅读次数:
169
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ... ...
linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基础。 下面的东西整理自网络。先感谢大家的分享! __sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data ...
分类:
系统相关 时间:
2017-07-03 16:22:09
阅读次数:
262
关键词: IOKING IOCP TCP Transmission Server Engine Lock Free Interlocked 云猴完毕portTCP通讯server引擎 无锁 原子锁(函数) 'IOKING' TCP Transmission Server Engine ('云猴'©T ...
分类:
其他好文 时间:
2017-07-02 13:10:08
阅读次数:
211
近期项目中遇到了一个分布式系统的并发控制问题。该问题能够抽象为:某分布式系统由一个数据中心D和若干业务处理中心L1,L2 … Ln组成;D本质上是一个key-value存储,它对外提供基于HTTP协议的CRUD操作接口。L的业务逻辑能够抽象为以下3个步骤:read: 依据keySet {k1, … ...
分类:
Web程序 时间:
2017-06-30 14:05:38
阅读次数:
190