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

非阻塞队列插入算法

    博客分类:
  • java
阅读更多

   摘自: http://www.ibm.com/developerworks/cn/java/j-jtp04186/

 

public class LinkedQueue <E> {
    private static class Node <E> {
        final E item;
        final AtomicReference<Node<E>> next;
        Node(E item, Node<E> next) {
            this.item = item;
            this.next = new AtomicReference<Node<E>>(next);
        }
    }
    private AtomicReference<Node<E>> head
        = new AtomicReference<Node<E>>(new Node<E>(null, null));
    private AtomicReference<Node<E>> tail = head;
    public boolean put(E item) {
        Node<E> newNode = new Node<E>(item, null);
        while (true) {
            Node<E> curTail = tail.get();
            Node<E> residue = curTail.next.get();
            if (curTail == tail.get()) {
                if (residue == null) /* A */ {
                    if (curTail.next.compareAndSet(null, newNode)) /* C */ {
                        tail.compareAndSet(curTail, newNode) /* D */ ;
                        return true;
                    }
                } else {
                    tail.compareAndSet(curTail, residue) /* B */;
                }
            }
        }
    }
}
 

 

分享到:
评论

相关推荐

    基于GPU的语义松弛非阻塞并行队列研究.pdf

    作者张翔宇和邓仰东设计了一种适用于GPU体系结构的非阻塞并行队列,通过特定的算法实现高效的插入和删除操作。这些算法可能包括原子操作和同步原语,以确保在GPU的并行环境中正确地执行队列操作。此外,他们还使用...

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

    - 传统阻塞队列往往基于链表或数组,其插入和删除操作复杂度相对较高。 - 在高吞吐量场景下,复杂的操作会成为性能瓶颈,阻碍队列处理能力。 - 数据结构的复杂性还增加了实现和维护的难度。 #### 三、无锁队列的...

    高效的实现队列

    并发队列如Java的`ConcurrentLinkedQueue`,设计用于高并发环境,其内部采用了非阻塞算法,通过CAS(Compare and Swap)操作实现线程安全,提高性能。 文件名"Quene"可能是表示队列实现的源代码文件。它可能包含了...

    对几种队列的总结

    这种队列使用非阻塞算法,通过 CAS(Compare and Swap)操作来保证并发一致性,降低了锁的使用,提高了性能。 最后,**环形缓冲区(Ring Buffer)**也可以视为一种特殊的队列,它利用固定大小的数组实现,通过索引...

    java队列

    5. **并发容器**:`ConcurrentLinkedQueue`是一个线程安全的无界队列,基于链接节点的非阻塞算法实现。这种实现提供了比同步队列更高的性能。 6. **生产者-消费者模型**:队列常被用作生产者-消费者问题的解决方案...

    java队列源码

    其中,`ConcurrentLinkedQueue` 是一个非阻塞的线程安全队列,而 `LinkedBlockingQueue` 是一个阻塞队列,适用于生产者-消费者模型。 2. **线程安全** - 在多线程环境下,线程安全队列是至关重要的,因为它们确保...

    多线程编程.docx

    - **ConcurrentLinkedQueue**:基于链表实现的非阻塞队列。 - **转移队列**: - **LinkedTransferQueue**:基于链表实现的转移队列,允许生产者等待消费者消费元素。 #### 三、阻塞队列的使用场景 阻塞队列非常...

    操作系统调度算法

    * insert1():将一个新的进程插入到就绪队列中,并根据优先级确定插入位置。 在算法中,我们还可以看到一些宏定义,例如M和L,它们用来定义时间片的大小和每次降低优先级的数量。这些宏定义可以根据实际情况进行...

    在ffplay的队列框架上实现一写多读的算法,用于同一个资源各个任务处理

    1. **阻塞与非阻塞**:为了提高效率,可以实现阻塞和非阻塞两种模式。在队列空时,阻塞读取操作会挂起线程,直到有新的数据;而非阻塞模式则会立即返回,让线程自行处理无数据的情况。 2. **信号量**:使用信号量...

    Java并发大神Doug Lee同步队列论文

    Scott三位专家共同完成,旨在提出两种新型非阻塞且无竞争的同步队列实现方式。这些同步队列作为生产者消费者模型中的核心组件,在其中生产者等待消费者取走数据,而消费者则等待生产者提供数据。论文中详细介绍了这...

    Python Queue(队列).docx

    - `put_nowait(item)`:非阻塞版本的`put`,如果队列无空间立即抛出`Full`异常。 - `get([block[, timeout]])`:从队列中取出元素,`block`和`timeout`参数同样用于控制阻塞和超时行为。 - `get_nowait()`:非阻塞...

    LM3S上基于ucos的应用,包括消息传递,队列,动态内存分配

    通过消息邮箱或消息队列,任务可以发送和接收特定数据结构,实现非阻塞通信。消息队列可以存储多个消息,而消息邮箱则只能容纳一个消息,当队列或邮箱满时,发送任务可能会被挂起,直到有空间接收新消息。 3. **...

    无锁缓冲队列

    总之,无锁缓冲队列是一种重要的并发编程技术,它利用原子操作来实现线程间的非阻塞通信,提高了系统的并行度和效率。理解其工作原理和优缺点,对于编写高效、可靠的并发代码至关重要。在锁_free_queue-master这个...

    操作系统实验 进程调度设计与实现

    首先,实验要求综合应用一系列知识点,包括邻接表、布尔数组、非阻塞输入、图形用户界面GUI、进程控制块(PCB)、进程状态转换以及多级反馈队列进程调度算法。邻接表用于表示不同优先级的就绪队列,布尔数组则用来...

    同步java之数组与队列

    例如,对于大量并发插入和删除的操作,`ArrayDeque`由于其非阻塞特性可能是更好的选择。而对于需要保证线程安全的场景,`BlockingQueue`接口及其实现如`LinkedBlockingQueue`提供了丰富的并发控制机制。 总之,理解...

    无锁队列

    在`ConcurrentLinkedQueue`中,每个节点包含一个数据元素以及指向下一个节点的引用,通过非阻塞的方式进行添加和删除操作。 无锁队列的核心设计思想是基于"帮助"机制和自旋等待。当一个线程尝试插入或删除元素时,...

    操作系统调度算法实验指导书1

    FCFS是最简单的非抢占式调度算法,它按照线程进入就绪队列的顺序来分配CPU。在这里,我们使用C++的deque容器来模拟这个队列。deque(双端队列)允许在两端进行插入和删除操作,这使得我们可以方便地在队列末尾添加新...

    多任务下的数据结构设计和分析

    有阻塞队列和非阻塞队列两种,其中阻塞队列在满或空时会阻塞线程,而非阻塞队列则通过返回值或异常告知消费者当前状态。 3. **栈**:在任务切换和回溯场景中,栈被广泛使用。例如,函数调用栈可以保存多任务间的...

    fifc算法实现的代码

    上述代码是FIFC算法的基本实现框架,实际应用中还需要考虑错误处理、线程安全以及可能的优化措施,比如并发处理多个连接,或者使用非阻塞I/O提高效率。 总结来说,FIFC算法在C语言中的实现涉及队列数据结构的使用,...

    大数据——数据结构.pdf

    - 非阻塞队列:操作失败时,不会阻塞,而是立即返回结果。 2. Queue方法 - add(E):在队尾添加元素,满时抛出异常。 - offer(E):在队尾添加元素,满时返回false。 - remove():删除队首元素,空时返回false。 ...

Global site tag (gtag.js) - Google Analytics