环形缓冲区的简单实现~
具体的业务逻辑需要具体的复杂化就行了~
package thread;
public class CircularBuf {
int NMAX=3;
int iput = 0; /* 环形缓冲区的当前放人位置 */
int iget = 0; /* 缓冲区的当前取出位置 */
int n = 0; /* 环形缓冲区中的元素总数量 */
double buffer[]=new double[3];
/* 环形缓冲区的地址编号计算函数,,如果到达唤醒缓冲区的尾部,将绕回到头部。
环形缓冲区的有效地址编号为:0到(NMAX-1)
*/
public int addring (int i){
return (i+1) == NMAX ? 0 : i+1;
}
/* 从环形缓冲区中取一个元素 */
public double get() {
int pos;
if (n>0){
pos = iget;
iget = addring(iget);
n--;
System.out.println("get-->"+buffer[pos]);
return buffer[pos];
}else {
System.out.println("Buffer is Empty");
return 0.0;
}
}
/* 向环形缓冲区中放人一个元素*/
public void put(double z){
if (n<NMAX){
buffer[iput]=z;
System.out.println("put<--"+buffer[iput]);
iput = addring(iput);
n++;
}else System.out.println("Buffer is full");
}
public static void main(String[] args){
CircularBuf cb=new CircularBuf();
cb.put(1);
cb.put(2);
cb.put(3);
cb.get();
cb.put(4);
cb.get();
cb.get();
cb.get();
}
}
分享到:
相关推荐
自己实现了一个环形缓冲区的简单类,并且做了一个TCP 服务端对这个类进行了用法演示
环形缓冲区读写操作的分析与实现,以及在并发条件下如何控制竞争
Delphi实现的环形缓冲区,有详细的注释说明和示意图,请大家给提出更为高效,简单的改进意见。 添加可以自动扩展大小的功能
Delphi实现的环形缓冲区,有详细的注释说明和示意图,请大家给提出更为高效,简单的改进意见。
创建一个环形缓冲区,可以简单实现数据的写入读出
打包环提供了环形缓冲区的简单实现。 用法 var DefaultCapacity int = 10 未初始化的环形缓冲区的DefaultCapacity。 更改此值只会影响更改后创建的环形缓冲区。 环型 type Ring struct { sync. Mutex } 类型...
这种方法优点是测试缓冲区满/空很简单;不需要做取余数操作;读写线程可以分别设计专用算法策略,能实现精致的并发控制。缺点是读写指针各需要额外的一位作为指示位。 如果缓冲区长度是2的幂,则本方法可以省略...
一种无OS的MCU实用软件管理系统,包括任务轮询框架,命令管理器、低功耗管理、环形缓冲区等实用模块。系统中广泛利用自定义段技术减少各个模块间的耦合关系,大大提供程序的可维护性。主要功能(支持模块自动化管理...
公司项目中经常设计到串口通信,TCP通信,而且大多都是实时的大数据的传输,然后大家都知道协议通讯肯定涉及到什么,封包、拆包、粘包、校验……什么鬼的概念一大堆,说简单点儿就是要一个高效率可复用的缓存区。...
rbf-rs 基于超简单const泛型的no_std环形缓冲区实现
循环缓冲区,循环缓冲区或环形缓冲区是一种数据结构,它使用单个固定大小的缓冲区,就像端到端连接一样。 这意味着您具有预定义的内存使用情况。 推和弹出操作始终为O(1)。 索引访问也是O(1)。 更多信息@ ...
从而实现整个环形缓冲区的数据读写。 1/** 2* @brief Write_RingBuff 3* @param u8 data 4* @return FLASE:环形缓冲区已满,写入失败;TRUE:写入成功 5* @author 杰杰 6* @date 2018 7* @version v1.0 8* @...
环缓冲 Ringbuf 是 go 语言的 ringbuffer 的简单无锁实现。
优先级队列对c ++使用环形缓冲区,固定长度container :: RingQueue C ++的环形优先级队列。 具有类似STL的单头实现。 只需将其放入您的项目中即可。 不是线程安全的C ++ 11实现完全可移植自排序,例如std :: set基本...
CBuffer:JavaScript实用程序 该项目的最终目标是实现整个JavaScript Array.prototype和一些其他实用程序方法,例如循环缓冲区,环形缓冲区结构。 注意:由于该库的功能,这被称为循环缓冲区,但是被实现为数组。 ...
, ·介绍嵌入式系统中独有的设计模式,如环形缓冲区、中断和定时器、硬件调试、PID控制、系统优化等。, ·如何优化系统以降低成本并提高性能。, ·如何在资源有限的环境中建立健壮的软件架构。, ·探讨了扫描仪、...
当缓冲区满时生产者阻塞并且当缓冲区有空时生产者又重新工作。类似的,消费者当缓冲区空时阻塞并且当缓冲区有产品时又重新工作。显然,生产者和消费者需要一种同步机制以协调它们的工作。 二、系统功能 本程序模拟...
Conversant Disruptor 是这种环形缓冲区中性能最高的实现,因为它几乎没有开销,并且采用了特别简单的设计。 2017 Conversant Disruptor - 仍然是世界上最快的入门运行 maven build 来构建和使用包。 $ mvn -U ...
课程“ Linux Kernel Internals”项目的补充程序项目...ringbuffer:无锁的环形缓冲区。 mbus:并发消息总线。 spmc:并发的单个生产者/多个消费者队列。 map-reduce:使用MapReduce进行单词计数。 许可证以上项目是
lab03-使用环形缓冲区和共享内存实现文件复制 lab04-实施ls -lR 使用zxcpyplib一些代码。 TinyOS实验室 关于 环境: 软体:Arch / TinyOS-2.1.2 硬件:Telosb 编译器:MSP430 语言:nesC(网络嵌入式系统C) ...