`
standalone
  • 浏览: 611450 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lock Free Stack

阅读更多
This example is copied from book "Java Concurrency in Practice".
From this example we can learn that the lock free queue code is not correct for MPMC (multi-producer-multi-consumer) in my previous post.

Actually, lock free means you should guarantee the atomicity of updating a pointer. When you add a new node on top of current stack top, the top node might be poped by another thread. So you should prepare to do that again if that did happen. How to do this? We thus need a CAS operation, if current top is what we saw and we have successfully update the top to a new node, ok, our job is done.

While, lock free queue can be more complicated if you insert one node to the tail since we need to update two pointers at same time, one is a *tail* pointing to the last node and one is its *next* pointer.

I will give one correct queue code in the next post.

@ThreadSafe
public class ConcurrentStack <E> {
AtomicReference<Node<E>> top = new AtomicReference<Node<E>>();
public void push(E item) {
Node<E> newHead = new Node<E>(item);
Node<E> oldHead;
do {
oldHead = top.get();
newHead.next = oldHead;
} while (!top.compareAndSet(oldHead, newHead));
}
public E pop() {
Node<E> oldHead;
Node<E> newHead;
do {
oldHead = top.get();
if (oldHead == null)
return null;
newHead = oldHead.next;
} while (!top.compareAndSet(oldHead, newHead));
return oldHead.item;
}
private static class Node <E> {
public final E item;
public Node<E> next;
public Node(E item) {
this.item = item;
}
}
}
分享到:
评论

相关推荐

    cpp-junctionC中的并发数据结构

    在`junction`库中,例如锁free队列(如`lockfree::queue`)和锁free栈(如`lockfree::stack`),它们利用原子操作(atomic operations)来实现线程间的同步,确保了在高并发下的高效性能和低延迟。 2. **无锁队列**...

    A Scalable Lock-free Stack Algorithm (2004)-计算机科学

    A Scalable Lock-free Stack AlgorithmDanny Hendler ∗School of Computer Science Tel-Aviv UniversityTel Aviv, Israel 69978hendlerd@post.tau.ac.ilNir Shavit Tel-Aviv University & Sun ...

    安全栈表实现,C++11实现,使用atomic特性

    `LockFreeStack.h`可能包含了一个无锁栈(Lock-Free Stack)的实现,这是一种更高级的并发数据结构,它完全避免了锁的使用,通过原子操作实现更高效率的并发访问。`targetver.h`和`stdafx.h`是Visual Studio项目中的...

    D:\uC_OS-II V2.51源码

    /* Clear the scheduling lock counter */ OSTaskCtr = 0; /* Clear the number of tasks */ OSRunning = FALSE; /* Indicate that multitasking not started */ OSIdleCtr = 0L; /* Clear the 32-bit idle ...

    A C++ library of Concurrent Data Structures.zip

    2. **同步集合**:如互斥量(Mutex-based Set)和无锁集合(Lock-Free Set),它们提供了在多线程环境下高效且安全的元素插入、删除和查找操作。 3. **原子操作数据结构**:如原子整型(Atomic Integer)、原子指针...

    libcds:通用数据结构库-实现宏

    libcds,全称为Lock-free and Wait-free Concurrent Data Structures,是一个高效、线程安全的C++数据结构库。该库致力于提供无锁(lock-free)和等待自由(wait-free)的数据结构实现,以提升多线程环境下的程序...

    富士施乐公司的C++笔试题

    根据给定的富士施乐公司的C++笔试题目,我们可以将其拆解... m_mutex.lock(); ret = preproc(arg); if(ret == -1) { throw new exception1(); } ``` 以上就是富士施乐公司C++笔试题中涉及的主要知识点及详细解释。

    mlib:使用纯C语言(C99或C11)的通用容器和类型安全容器的库,用于容器的广泛收集(与C ++ STL比较)

    部分数据结构和函数可能支持无锁(lock-free)操作,这对于多线程环境下的性能至关重要。 7. **类型安全**: `mlib`强调类型安全,这意味着在编译时就能检测到错误,避免了C语言中常见的指针错误。 8. **接口...

    EurekaLog_7.5.0.0_Enterprise

    20)..Fixed: Minor bugs in stack tracing (which usually affected stacks for leaks) 21)..Fixed: Rare deadlocks in multi-threaded applications 22)..Fixed: Taking screenshot of minimized window 23)..Fixed...

    我们是怎么支撑双11万亿流量的—— 阿里分布式缓存(Tair)技术分享_姜志锋@阿里巴巴.pdf

    Tair 实现了细粒度锁(fine-grained locks)、无锁数据结构(lock-free data structures)、CPU 本地数据结构(per-CPU data structures)、读拷贝更新(RCU)等优化。 用户态协议栈 Tair 实现了用户态协议栈...

    java内存模型

    深入理解Java内存模型还需要了解内存屏障(Memory Barrier)、重排序(Reordering)和无锁编程(Lock-Free Programming)等相关知识。例如,内存屏障是一种硬件指令,用于阻止处理器对指令的重排序,以保证内存操作...

    Concurrent data structures in C++.zip

    - **无锁数据结构(Lock-free Data Structures)**:无锁数据结构不依赖于互斥锁或条件变量,而是通过原子操作来保证并发安全。虽然它们通常有更高的性能,但实现起来也更为复杂,需要对内存模型有深入理解。 - **...

    linux c 函数库

    3. 内存管理:C语言提供了动态内存分配的函数,`malloc`用于分配内存,`calloc`分配并初始化内存,`realloc`调整已分配内存的大小,而`free`则用于释放内存。 4. 数组和指针:`&lt;stdlib.h&gt;`中的`memcpy`和`memmove`...

    java C C++面试题

    3. 多线程:线程创建方式、同步机制(synchronized、Lock)、并发工具类(Semaphore、CountDownLatch)。 4. 内存模型:JVM内存结构(堆、栈、方法区等)、内存溢出、内存泄漏问题。 5. I/O流:文件流、字符流、缓冲...

    acpi控制笔记本风扇转速

    Fixed a problem with the Global Lock where the lock could appear to be obtained before it is actually obtained. The global lock semaphore was inadvertently created with one unit instead of zero units....

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续.mp4 │ 高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │ ...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续.mp4 │ 高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │ ...

    oracle DBA日常脚本

    ..........\Obj_Lock.sql ..........\Open_Cursors.sql ..........\Pipes.sql ..........\RBS_Extents.sql ..........\RBS_Stats.sql ..........\Recovery_Status.sql ..........\Roles.sql ..........\...

    cygwin—api

    Cygwin API还包括一系列特有函数,用于处理Cygwin运行时环境下的特殊需求,如`cygwin_stackdump`, `cygwin_attach_handle_to_fd`等。 总之,Cygwin API不仅提供了丰富的功能,而且在设计上充分考虑了与各种标准的...

Global site tag (gtag.js) - Google Analytics