11得票5回答
高效的循环链表

我想要一个简单而高效的循环缓冲区/队列。如果我使用std::vector,我必须这样做:if ( v.size() >= limit ) { std::vector<int> it = v.begin(); v.insert( it, data ); ...

11得票1回答
了解Linux内核循环缓冲区

这里有一篇文章:http://lwn.net/Articles/378262/,介绍了Linux内核的环形缓冲实现。我有一些问题: 以下是“生产者”代码:spin_lock(&producer_lock); unsigned long head = buffer->head;...

10得票5回答
提高C语言循环缓冲区的效率。

我想请教如何提高我的循环缓冲代码的效率。 我在stackoverflow上查看了所有关于循环缓冲的话题,发现几乎都是关于如何使用此类缓冲区或基本实现循环缓冲区。我真正需要的是如何使它超级高效。 计划将此缓冲区与具有单精度FPU的STM32F4微控制器一起使用。 我计划特别大量使用write...

10得票6回答
循环缓冲区计算剩余空间的简化算法?

我想知道是否有比这更简单(单一)的方法来计算循环缓冲区中剩余的空间?int remaining = (end > start) ? end-start : bufferSize - start + end;

9得票2回答
在const成员函数中,std::upper_bound返回const迭代器。

这是一个包含某些结构体的boost::circular_buffer的类。我对包含的进行了迭代器别名定义(typedef)。 我的问题在于当doWork函数被标记为const时,std::upper_bound函数的返回值与MyIterator类型不兼容,因为返回值具有boost::cb_d...

9得票3回答
C/C++无锁(或非阻塞)环形缓冲区,可以覆盖最旧的数据?

我正在寻找一种无锁或非阻塞的方法来创建一个环形缓冲区,用于单个消费者/单个生产者,它将覆盖缓冲区中最旧的数据。我已经阅读了很多无锁算法,在缓冲区满时返回false——即不添加;但我找不到任何伪代码,谈论如何在需要覆盖最旧的数据时进行操作。 我正在使用GCC 4.1.2(工作的限制,我不能升级...

8得票2回答
如何在C++中使用无锁循环缓冲区实现零拷贝TCP?

我有多个线程需要从TCP流中获取数据。我希望使用共享内存中的循环缓冲区/队列从TCP套接字读取。TCP接收将直接写入循环队列。消费者将从队列中读取。 这种设计应该实现零拷贝和零锁定。但是这里有两个不同的问题。 1.是否可能/高效地从TCP套接字中读取一个逻辑消息?如果不行,而我读取了多于一...

8得票5回答
闪存中的循环缓冲区

我需要在一个flash芯片中以循环队列的方式存储长度不同的项目。每个项目将有其封装,这样我就可以确定它的大小和下一个项目的起始位置。当缓冲区中有足够多的项目时,它将回到开头。 如何在flash芯片中存储循环队列是一个好问题? 我想要存储数万个项目的可能性。因此,从开头开始读取到缓冲区末尾并...

8得票3回答
无优先级倒置的环形缓冲区

我有一个高优先级进程需要向低优先级进程传递数据。我编写了一个基本的环形缓冲区来处理数据传递: class RingBuffer { public: RingBuffer(int size); ~RingBuffer(); int count() {return ...

8得票3回答
C语言中的循环缓冲区实现

我找到了关于如何实现循环缓冲区的伪代码。 // Producer. while (true) { /* produce item v */ while ((in+1)%n == out) /* Wait. */; b[in] = v; in = (in + 1) % ...