并发访问的安全性通常有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问题时,如果考虑性能开销,我们也没有特别有效的解决办法。
相关推荐
论文可能会探讨不同无锁队列算法的优缺点,如Michael-Scott队列、Henderson队列、Treiber堆栈等,并通过实验验证其性能。此外,还可能讨论在特定硬件和操作系统上的表现,以及如何针对特定场景进行优化。 总结来说...
4. **无锁哈希表**:无锁哈希表如Treiber堆栈,利用链表节点的原子操作来实现插入、删除和查找操作。每个槽位都是一个链表,线程可以独立地修改自己的链表节点,从而避免锁竞争。 5. **自旋锁与等待锁**:虽然无锁...
- 采用无锁数据结构(如Treiber栈或Michael-Scott队列),实现无锁并发操作。 - 考虑使用锁分离技术,提高并发性。 3. **高效尾部指针维护**: - 使用循环队列或双端队列减少维护尾部指针的开销。 - 采用延迟...
"Treiber"这个词在德语中是“驱动程序”的意思,而在IT领域,尤其是软件开发中,驱动程序(Driver)是计算机硬件与操作系统之间的重要桥梁。驱动程序允许操作系统和其他软件应用程序控制硬件设备,使得硬件的功能...
【三星USB驱动 Qualcomm_USB_Treiber】是一款专为三星设备设计的USB驱动程序,它使得计算机能够识别并正常连接到三星手机、平板等移动设备。在日常使用中,当用户需要进行数据同步、软件更新或者刷机操作时,这个...
该工具是一种实验模型检查器,用于针对无限制数量的客户端线程验证具有安全内存回收(SMR)的无锁数据结构的线性化[1]。 该工具能够使用基于时期的回收[5]和危险指针[6]处理单链接的数据独立数据结构,例如Treiber...
IDM模型是由Treiber和Kesting在2000年提出的,是一种广泛使用的微观交通流模型。该模型考虑了驾驶员的安全感、舒适度和行驶速度,通过数学公式描述了车辆之间的相互影响。IDM模型的主要优点在于其能够合理地模拟加速...
ntp时间同步软件,很好用的一小工具 NTP für Windows NT/2000/XP NTP Cheat Sheet / Kurzreferenz Linux - Treiber für Meinberg PC-Einsteckkarten
在Treiber & TWAIN Installation中,我们可以看到扫描仪的德语安装指南,旨在帮助德语用户安装扫描仪驱动程序和TWAIN。 十一、Installation des ezScanCenter Programms 在Installation des ezScanCenter ...
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-...
- 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...
在压缩包内的"PN-Treiber TIA-Portal Projekt.zap12"文件,很可能是TIA Portal的一个项目文件,用户可以导入这个文件到TIA Portal中,查看或进一步编辑已配置的PN驱动器项目。用户指南文档"user_guide.c"则详细阐述...
Treiber和A. Kesting提出。该模型以驾驶员舒适度和安全为出发点,考虑了车辆加速度、跟车距离、相对速度等多个因素。IDM通过一系列参数来描述驾驶员的保守程度、反应时间和舒适度阈值,从而预测驾驶员的行驶决策。...
可以从提供的链接或其他可信赖的来源下载并安装适合你系统的ODBC驱动,例如这里提到的Microsoft Paradax-treiber(*.db)。安装完成后,通过控制面板的“管理工具”找到“数据源(ODBC)”进行配置。创建一个新的数据...
在这里,创建一个新的数据源,选择相应的驱动(在这个例子中是Microsoft Paradax-treiber),并指定数据库文件的位置。确保输入的数据源名称易于识别,例如“SHJYT”。 现在,你已经准备好了从SQL Server导出的数据...
文中提到的“Advances in Computer Vision and Pattern Recognition”可能是出版物的系列名称,而“Marco Alexander Treiber”很可能是该系列某本书的作者或编者。该系列可能专注于计算机视觉与模式识别领域的最新...
- 需要下载并安装适合的ODBC驱动程序,例如MIicrosoft Paradax-treiber,以便与DBF(dBase文件)格式的数据进行交互。 4. 数据源名称 (DSN): - 在配置ODBC时,需要创建一个数据源名称,如"SHJYT",该名称将用于...