`

一种读写可并发进行的队列的实现方法

 
阅读更多
四.
m_end->assignValue(v);
if(m_beg == m_end->next){
m_end->next = allocate(m_end->next);
m_size;
}
m_end = m_end->next;
}
bool empty() const
{
return m_beg == m_end;
}
const_reference front() const
{
return m_beg->value();
}
reference front()
{
return m_beg->value();
}
void pop_front()
{
if(m_beg != m_end)
{
m_beg->freeValue();
m_beg = m_beg->next;
}
}
size_type size() const
{
int ret = 0;
node_pointer pend = m_end;

for(node_pointer beg = m_beg; beg != m_end; ret, beg = beg->next);
return ret;
}
size_type buffer_size() const
{
return m_size;
}
private:
node_pointer m_end;
node_pointer m_beg;
size_type m_size;
//不明白allocator的使用方式,下面的表达式编译不通过
//typedef typename allocator_type::template rebind::other _node_alloc_type
//暂时使用new,delete来分配释放内存
node_pointer allocate()
{
return new node_type();
}
node_pointer allocate(node_pointer pnext)
{
return new node_type(pnext);
}
void deallocate(node_pointer pnode)
{
delete pnode;
}

struct ListNode
{
char buffer[sizeof(T)];
ListNode* next;
ListNode():next(this)
{
}
explicit ListNode(ListNode* pnext):next(pnext)
{
}
bool operator==(const ListNode& rhs) const
{
return next == rhs->next;
}
bool operator != (const ListNode& rhs) const
{
return !(*this == rhs);
}
void freeValue()
{
value().T::~T();
}
void assignValue(const T& data)
{
new(buffer) T(data);
}
T& value()
{
return *(T*)buffer;
}
const T& value() const
{
return *(T*)buffer;
分享到:
评论

相关推荐

    一个c++11实现的无锁队列.zip

    无锁队列是一种高效、线程安全的数据结构,尤其在多线程环境下,它通过避免锁的使用来提高并发性能。C++11引入了原子操作(atomic operations)和线程支持库,使得无锁编程成为可能。在这个“一个c++11实现的无锁...

    cpp-一个快速多生产者多消费者的C11无锁并发队列

    无锁编程是一种编程范式,它避免了在共享数据上使用锁,而是通过原子操作(如CAS - Compare and Swap)来保证数据的一致性。C++11引入了对原子操作和线程支持的原生支持,使得实现这样的无锁数据结构成为可能。 在...

    行业分类-设备装置-一种对缓冲队列并发执行读、写访问的方法和设备.zip

    标题“行业分类-设备装置-一种对缓冲队列并发执行读、写访问的方法和设备”揭示了这个主题专注于在硬件或设备级别的缓冲队列上实现并发的读写操作。这种方法旨在提高系统的并行处理能力和吞吐量,特别是在多任务或多...

    自扩充的Lock-Free并发环形队列算法

    总结来说,自扩充的Lock-Free并发环形队列算法通过锁无关的机制实现了高效且动态扩展的并发队列,适用于高并发的场景。尽管实现复杂,但通过巧妙地利用原子操作和循环链表结构,可以在不牺牲性能的前提下,有效地...

    bank.rar_ATM模拟器_消息队列 _读写队列

    消息队列是一种异步通信机制,它允许应用程序将消息发送到队列,然后由接收端在适当的时间处理。在ATM模拟器中,消息队列可能被用来处理用户请求,如存款、取款、查询余额等。这样,当客户端发送请求时,服务器不必...

    网络游戏-基于并发无锁环形队列的网络速率实时统计方法.zip

    本文档“基于并发无锁环形队列的网络速率实时统计方法”探讨了一种高效、低延迟的技术手段,即使用并发无锁环形队列来实现这一目标。这种技术尤其适用于多线程环境,能够确保数据的安全性和一致性,同时减少锁的开销...

    行业分类-设备装置-一种基于旋转队列体制的多功能FIFO存储器及其读写方法.zip

    本话题着重讨论了一种创新的基于旋转队列体制的多功能FIFO存储器及其读写方法。这种设计旨在提高存储效率,降低延迟,并增强系统功能。 首先,我们来理解FIFO的基本原理。在FIFO存储器中,数据按照进入的顺序被存储...

    一个c++环形队列缓冲区

    环形缓冲区(Circular Buffer),又称循环队列,是一种高效的数据结构,在嵌入式系统、网络通信、多媒体处理等领域有着广泛的应用。它通过在固定大小的内存空间内循环利用来提高内存利用率和降低数据处理的延迟。 #...

    php实现的memcached队列类

    AB面轮值替换策略是一种常见的队列管理方式,通常通过两个或者多个“面”(即队列段)交替进行读写操作,以防止某个面被过度使用,保证了队列操作的均衡性。 在PHP实现的这个Memcached队列类中,有以下几个主要功能...

    C++ windows版 多生产者多消费者的队列实现

    在IT领域,多生产者多消费者(Multiple Producer-Multiple Consumer, MP-MC)模型是一种常见的并发编程模式,它主要用于处理数据共享的问题。在Windows环境下,使用C++来实现这一模型通常涉及到线程同步和互斥量等...

    c++11无锁队列的一种简单实现.pptx

    C++11无锁队列是一种在多线程环境中用于高效数据交换的技术,它避免了传统互斥锁带来的开销,从而提高了并发性能。在C++11中,无锁队列的实现主要依赖于新标准引入的多线程支持、原子操作和内存模型。 首先,我们来...

    redis的sorted set实现延时队列

    延时队列是一种特殊的队列,它的特性是元素不是立即被处理,而是要在设定的延迟时间后才被消费。Redis 的有序集合通过结合其成员的分数(score)功能,可以轻松实现这一功能。 **一、Redis 有序集合** 有序集合是 ...

    python-基于python实现的sqlite队列+方便处理sqlite并发.zip

    这样可以确保每个时刻只有一个线程在进行数据库操作,避免了并发冲突,同时也提供了一种线程安全的解决方案。 在实际应用中,队列的实现可能包括以下步骤: 1. 创建一个线程安全的队列实例。 2. 每个线程在需要进行...

    mysql 队列 实现并发读

    在IT领域,尤其是在数据库管理中,队列是一种关键的数据结构,尤其在处理并发读写场景时,其作用尤为重要。在MySQL环境下,队列通常通过表格的形式实现,每一行代表一个队列元素。队列的基本原则是先进先出(FIFO)...

    消息队列发送消息的C#代码实现

    在IT行业中,消息队列(Message Queue,MQ)是一种常用于进程间通信的技术,它可以有效地解耦系统组件,提高系统的可扩展性和容错性。在C#编程环境中,我们可以使用.NET框架提供的System.Messaging命名空间来操作...

    多线程与循环队列

    总结来说,多线程中的循环队列是一种强大的工具,它结合了多线程的并发优势和循环队列的高效特性,广泛应用于各种并发和多线程编程场景。在实际开发中,理解并熟练掌握这一技术,可以极大地提升程序的性能和可扩展性...

    完全公平队列的实现

    "完全公平队列"(Completely Fair Queueing,简称CFQ)是一种I/O调度算法,旨在为多个进程提供公平的磁盘访问时间。在Linux内核中,CFQ被广泛用于提升系统性能,特别是对于那些需要频繁读写硬盘的并发应用。 CFQ的...

    《java并发编程的核心方法和框架》

    《java并发编程的核心方法和框架》这本书旨在深入探讨这一主题,帮助开发者掌握Java环境下的并发处理技巧。 1. **线程基础** - **线程创建**:Java提供了两种主要的线程创建方式,一是通过实现`Runnable`接口,二...

    window消息队列(MSMQ)实现

    Windows消息队列(Message Queuing,简称MSMQ)是微软提供的一种可靠的消息传递技术,它允许应用程序在不同的时间、不同的网络连接状态以及不同的计算机之间交换信息。MSMQ通过存储和转发消息来确保即使在网络不稳定...

    线程安全型队列的实现

    队列是一种基本的数据结构,它遵循先进先出(FIFO)的原则。在单线程环境下,队列的插入(入队)和删除(出队)操作相对简单,但在多线程环境中,由于多个线程可能同时进行这些操作,如果不加以控制,就可能出现数据...

Global site tag (gtag.js) - Google Analytics