CAS学习无锁队列前先看一个基本概念,CAS原子指令操作。 CAS(Compare and Swap,比较并替换)原子指令,用来保障数据的一致性。 指令有三个参数,当前内存值V、旧的预期值A、更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返回fals ...
分类:
其他好文 时间:
2020-09-17 20:57:35
阅读次数:
33
线程同步 同步:同步控制着线程之间的执行顺序,不让他们抢占式执行。在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。 原子访问:同一时刻,只允许一个线程访问临界资源; 原子操作:指多步操作组成的一个操作;原子操作中线程不会被切换,线程切换要么在原子操作 ...
分类:
编程语言 时间:
2020-06-29 09:53:49
阅读次数:
69
【前言】 队列是众多数据结构中最常见的一种之一。曾经有人和我说过这么一句话,叫做“程序等于数据结构+算法”。因此在设计模块、写代码时,队列常常作为一个很常见的结构出现在模块设计中。DPDK不仅是一个加速网络IO的框架,其内部还提供众多的功能组件,rte_ring就是DPDK内部提供的一种无锁队列,本 ...
分类:
其他好文 时间:
2020-01-18 16:11:20
阅读次数:
76
发现 zeromq 的 yqueue_t 模板类,其数据存储理念设计得非常妙。借这一理念,按照 STL 的泛型类 queue 的接口标准,我设计了一个线程安全的 单生产者/单消费者(单线程push/单线程pop) FIFO 队列,以此满足更为广泛的应用。 1. 数据存储理念的 ...
分类:
编程语言 时间:
2020-01-01 23:46:14
阅读次数:
110
一、数据结构 1.手写链表的基本操作(创建、新增节点、删除节点、销毁等) 2.链表的反转 3.如何判断一个链表有环 4.双向链表删除一个非头非尾节点 5.单向链表删除一个非头非尾节点 6.二叉树的前、中、后序遍历打印 7.STL中vector的内部实现原理 8.STL中vector与list的区别 ...
分类:
编程语言 时间:
2019-08-20 22:30:56
阅读次数:
139
发现 zeromq 的 yqueue_t 模板类,其数据存储理念设计得非常妙。借这一理念,按照 STL 的泛型类 queue 的接口标准,我设计了一个线程安全的 单生产者/单消费者(单线程push/单线程pop) FIFO 队列,以此满足更为广泛的应用。 1. 数据存储理念的 ...
分类:
其他好文 时间:
2019-06-30 18:54:29
阅读次数:
115
关于CAS等原子操作 在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。有了这个原子操作,我们就可以用其来实现各种无锁(lock ...
分类:
其他好文 时间:
2019-05-19 11:39:49
阅读次数:
187
java并发包中提供了三个常用的并发队列实现,分别是:ConcurrentLinkedQueue、LinkedBlockingQueue和ArrayBlockingQueue。 ConcurrentLinkedQueue使用的是CAS原语无锁队列实现,是一个异步队列,入队速度很快,出队进行了加锁,性 ...
分类:
编程语言 时间:
2019-05-01 18:45:13
阅读次数:
155
https://blog.csdn.net/yishizuofei/article/details/78353722 https://blog.csdn.net/yishizuofei/article/details/78353722 https://blog.csdn.net/yishizuofe ...
分类:
其他好文 时间:
2019-04-08 17:26:09
阅读次数:
183
队列是常用的数据结构,采用的FIFO(first in firstout)原则,新元素(等待进入队列的元素)总是被插入到尾部,而读取的时候总是从头部开始读取。在计算中队列一般用来做排队(如线程池的等待排队,锁的等待排队),用来做解耦(生产者消费者模式),异步等等。在java多线程应用中,队列的使用率 ...
分类:
其他好文 时间:
2019-03-01 18:46:11
阅读次数:
238