并发访问的安全性通常有Lock(同步)或者CAS方式实现,其中CAS是无锁(lock-free)并发的基础理念;本文主要简述一下通过Treiber Stack(1986,R.Kent Treiber)实现一个无锁并发栈,其主要思想就是使用CAS原子性的操作栈顶(或者栈底,单端队列),根据其思想,我们可以创造出更多有意义的实现。
其中在JAVA中,FutureTask.WaitNode是典型的Treiber Stack实现;此外,Fork/Join框架中WorkQueue的实现中借鉴了此思想。
我们展示一下,Treiber Stack的典型示例:
import java.util.concurrent.atomic.AtomicReference; /** * 一个基于CAS实现的无锁(lock-free)并发栈 * @author liuguanqing * created 2018/10/15 下午2:31 **/ public class TreiberStack <E> { private AtomicReference<Node<E>> top = new AtomicReference<Node<E>>(); /** * 添加到栈顶 * @param item */ public void push(E item) { Node<E> header = new Node<E>(item); Node<E> currentHead; do { currentHead = top.get(); header.next = currentHead; } while (!top.compareAndSet(currentHead, header)); } /** * 弹出栈顶 * @return */ public E pop() { Node<E> currentHead; Node<E> header; do { currentHead = top.get(); if (currentHead == null) return null; header = currentHead.next; } while (!top.compareAndSet(currentHead, header)); return currentHead.item; } private static class Node <E> { public final E item; public Node<E> next; public Node(E item) { this.item = item; } } }
谈到CAS,我们绕不开ABA的问题,如果你能够预测ABA发生的概率较低或者ABA发生时并不会对数据结果产生错误,我们可以认为ABA是无害的。其实面对ABA问题时,如果考虑性能开销,我们也没有特别有效的解决办法。
相关推荐
treiber
在网上找了好久才找到的驱动 很难找的资源 分享下 也赚点积分 呵呵
该工具是一种实验模型检查器,用于针对无限制数量的客户端线程验证具有安全内存回收(SMR)的无锁数据结构的线性化[1]。 该工具能够使用基于时期的回收[5]和危险指针[6]处理单链接的数据独立数据结构,例如Treiber...
ntp时间同步软件,很好用的一小工具 NTP für Windows NT/2000/XP NTP Cheat Sheet / Kurzreferenz Linux - Treiber für Meinberg PC-Einsteckkarten
程序 (控制面板(管理工具(数据源(ODBC) 图(1)数据源ODBC管理器 单击添加(图(2)创建新数据源 图(2)创建新数据源 选择MIicrosoft Paradax-treiber(*.db)(点完成 (添加数据源名 : SHJYT (如图(3)) 点选择目录选择D:\...
WIBU-KEY Runtime Kit Diese Hilfedatei gibt einen Überblick über das WIBU-KEY Runtime Kit. Installation der WIBU-KEY-Software Deinstallation der WIBU...Wie bekommt man die neueste Treiber? Version
Treiber bereitstellen Das Installationsscript 安装个人化的安装程序。 安装向导之后,桌面上的脚本脚本将生效。 Deren Funktion ist im Verzeichnis %SYSTEMDRIVE%\Drivers nach den modellspezifischen Ordner...
- 最新版本是 2018 年 10 月 11 日起的 2.0 德语:Verbindung mit Excel-VBA zu einer SQL-Datenbank (mysql MariaDB) Oder eine Datenbank mit dem entsprechenden ODBC-Treiber 主题:vba,vba-excel,mysql-...
构造了包括 BT 7/ 5滤波器(Brislawn-Treiber)在内的 7/ 5小波滤波器簇,依据欧几里得算法给出了 7/ 5小波基提升格式的构造过程和提升实现算法 .根据7/ 5小波基优化条件的要求,证明了 7/ 5小波基的、 提升系数α为0. ...