`
QING____
  • 浏览: 2253243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Treiber Stack无锁并发

    博客分类:
  • JAVA
 
阅读更多

    并发访问的安全性通常有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问题时,如果考虑性能开销,我们也没有特别有效的解决办法。

分享到:
评论

相关推荐

    无锁队列英文论文(具有研究价值).zip

    论文可能会探讨不同无锁队列算法的优缺点,如Michael-Scott队列、Henderson队列、Treiber堆栈等,并通过实验验证其性能。此外,还可能讨论在特定硬件和操作系统上的表现,以及如何针对特定场景进行优化。 总结来说...

    Lock free 论文集合,若干无锁数据结构实现的经典论文,500多页.zip

    4. **无锁哈希表**:无锁哈希表如Treiber堆栈,利用链表节点的原子操作来实现插入、删除和查找操作。每个槽位都是一个链表,线程可以独立地修改自己的链表节点,从而避免锁竞争。 5. **自旋锁与等待锁**:虽然无锁...

    高性能阻塞队列的数据结构创新.pptx

    - 采用无锁数据结构(如Treiber栈或Michael-Scott队列),实现无锁并发操作。 - 考虑使用锁分离技术,提高并发性。 3. **高效尾部指针维护**: - 使用循环队列或双端队列减少维护尾部指针的开销。 - 采用延迟...

    treiber

    "Treiber"这个词在德语中是“驱动程序”的意思,而在IT领域,尤其是软件开发中,驱动程序(Driver)是计算机硬件与操作系统之间的重要桥梁。驱动程序允许操作系统和其他软件应用程序控制硬件设备,使得硬件的功能...

    三星USB驱动 Qualcomm_USB_Treiber

    【三星USB驱动 Qualcomm_USB_Treiber】是一款专为三星设备设计的USB驱动程序,它使得计算机能够识别并正常连接到三星手机、平板等移动设备。在日常使用中,当用户需要进行数据同步、软件更新或者刷机操作时,这个...

    TMRexp:使用安全内存回收的无锁数据结构的实验线性化检查器

    该工具是一种实验模型检查器,用于针对无限制数量的客户端线程验证具有安全内存回收(SMR)的无锁数据结构的线性化[1]。 该工具能够使用基于时期的回收[5]和危险指针[6]处理单链接的数据独立数据结构,例如Treiber...

    traffic_simulation-master_python_跟驰_换道模型_交通流_idm

    IDM模型是由Treiber和Kesting在2000年提出的,是一种广泛使用的微观交通流模型。该模型考虑了驾驶员的安全感、舒适度和行驶速度,通过数学公式描述了车辆之间的相互影响。IDM模型的主要优点在于其能够合理地模拟加速...

    ntp 时间同步软件NTP für Windows NT/2000/XP/2003/Vista/Windows 7 ("Stable" Version)

    ntp时间同步软件,很好用的一小工具 NTP für Windows NT/2000/XP NTP Cheat Sheet / Kurzreferenz Linux - Treiber für Meinberg PC-Einsteckkarten

    Plustek精益EasyScan400安装说明书.pdf

    在Treiber & TWAIN Installation中,我们可以看到扫描仪的德语安装指南,旨在帮助德语用户安装扫描仪驱动程序和TWAIN。 十一、Installation des ezScanCenter Programms 在Installation des ezScanCenter ...

    wibudriver

    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

    WindowsUnity:现代世界中的性能,稳定性和安全性

    Treiber bereitstellen Das Installationsscript 安装个人化的安装程序。 安装向导之后,桌面上的脚本脚本将生效。 Deren Funktion ist im Verzeichnis %SYSTEMDRIVE%\Drivers nach den modellspezifischen Ordner...

    vbaMyAdmin:用 Excel-VBA 连接 SQL 数据库(mysql MariaDB)-开源

    - 最新版本是 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-...

    MOBIL换道模型Python数值仿真

    - Kesting, A., Treiber, M., & Schönhof, M. (2007). General lane-changing model mobil for car-following models. Transportation Research Record: Journal of the Transportation Research Board, (2013), 86...

    109478514_PN_Driver_Guide_CODE_V1.zip

    在压缩包内的"PN-Treiber TIA-Portal Projekt.zap12"文件,很可能是TIA Portal的一个项目文件,用户可以导入这个文件到TIA Portal中,查看或进一步编辑已配置的PN驱动器项目。用户指南文档"user_guide.c"则详细阐述...

    ovm_idm.zip_IDM 和 OVM_OVM模型_courttw9_eastacd_iDM模型

    Treiber和A. Kesting提出。该模型以驾驶员舒适度和安全为出发点,考虑了车辆加速度、跟车距离、相对速度等多个因素。IDM通过一系列参数来描述驾驶员的保守程度、反应时间和舒适度阈值,从而预测驾驶员的行驶决策。...

    Sqlserver数据库转成mysql数据库[参照].pdf

    可以从提供的链接或其他可信赖的来源下载并安装适合你系统的ODBC驱动,例如这里提到的Microsoft Paradax-treiber(*.db)。安装完成后,通过控制面板的“管理工具”找到“数据源(ODBC)”进行配置。创建一个新的数据...

    Sqlserver数据库转成mysql数据库.pdf

    在这里,创建一个新的数据源,选择相应的驱动(在这个例子中是Microsoft Paradax-treiber),并指定数据库文件的位置。确保输入的数据源名称易于识别,例如“SHJYT”。 现在,你已经准备好了从SQL Server导出的数据...

    Optimization for Computer Vision.

    文中提到的“Advances in Computer Vision and Pattern Recognition”可能是出版物的系列名称,而“Marco Alexander Treiber”很可能是该系列某本书的作者或编者。该系列可能专注于计算机视觉与模式识别领域的最新...

    Sqlserver数据库转成mysql数据库.doc

    - 需要下载并安装适合的ODBC驱动程序,例如MIicrosoft Paradax-treiber,以便与DBF(dBase文件)格式的数据进行交互。 4. 数据源名称 (DSN): - 在配置ODBC时,需要创建一个数据源名称,如"SHJYT",该名称将用于...

Global site tag (gtag.js) - Google Analytics