本文目录一览

1,怎样用c语言实现一个环形缓存区

定义个数组如a[10];用两个head tail 指针存入数据后tail++ 读取数据后head++为了循环利用此块空间 做以下处理:存跟读数据时指针处理 tail%10 head%10判断缓存空?tail == head+1判断缓存满?tail == head+9

怎样用c语言实现一个环形缓存区

2,设有N个整数环形缓冲区和一个无穷数列A进逐个地把整数写入环境

这是进程之间通信问题。如果是在管道方面,AB进程为有名管道FIFO;A进程为写管道进程,B进程为读管道进程。在信号量方面,A进程与B进程为“生产者”与“消费者”的关系;执行的是pv操作。
搜一下:设有N个整数环形缓冲区和一个无穷数列,A进逐个地把整数写入环境缓冲区,B进程则逐个地把缓冲区中整数读出。

设有N个整数环形缓冲区和一个无穷数列A进逐个地把整数写入环境

3,请教个关于环形缓冲区的问题

如果你是用动态内存来做环形队列,你来一个信息要开辟一个空间,你如此你不处理信息释放动态内存,到达一定数量你没有从头保存,继续开辟,就是如此一般问题。如果你用数组来做,保存到尾了,再从头存放,信息处不处理都不会死机,只是信息被覆盖了而已。
请解释一下什么叫“环形缓冲区”,以及用了和没用“环形缓冲区”对于读写文本文件的区别。

请教个关于环形缓冲区的问题

4,编写一个环形缓冲circularbuffer

private FileOutputStream fos = null; public void wit(String s, File f) throws IOException if(fos==null) fos = new FileOutputStream(f); } byte[] b = s.getBytes(); fos.write(b, 0, b.length); fos.flush(); }wit里面要传的s是要写入的字符串,f是要写如那个文件的文件对象第二个方法的问题你能不能再详细点 没明白

5,环形缓冲区为什么是lockfree的

环形缓冲区(就是一个队列吧)可以有lock free的实现。具体原因在于,每一个producer或者consumer,都不需要对整个数据结构独占,不需要对整个数据结构加锁。他们做的都只是移动head、tail。这样自然可以通过对head和tail的原子操作实现。试着手写一个可能可以在x86上使用的插入(enqueue)实现//atomicold_head = __sync_fetch_and_add(&queue->head, len);//update//for i in (old_head, old_head+len)queue->data[i] = new_val;这样。。。不知道说的对不对。。。可以看下Lamport关于Lock-free queue的论文,现在回家了我也不方便搜答主可以看看!

6,怎么计算环形缓冲区长度

两个函数未经调试#define MAXLEN 200int Buff[MAXLEN];int *Ptr_W = Buff; // 写指针初始化为Buff[0]int *Ptr_R = NULL; // 读指针初始化为NULL// 读数据。成功读出时,返回1,x存放读出的结果。不成功返回0,x的内容不可用int ReadData(int Buff[],int *x) if(Ptr_R == NULL || Ptr_R >= Ptr_W) return 0; *x = *Ptr_R; Ptr_R += Buff + (Ptr_R - Buff + 1) % MAXLEN; return 1;}// 写数据。成功写入时,返回。不成功返回0int WriteData(int Buff[],int x) if(Ptr_R == NULL) Ptr_R = Buff; // 初次写入时,附带完善读指针的初始化操作 *Ptr_W++ = x; return 1; } if(Ptr_W == Ptr_R) return 0; // 缓冲区满 *Ptr_W = x; Ptr_W += Buff + (Ptr_W - Buff + 1) % MAXLEN; return 1;}
两个函数未经调试#define maxlen 200int buff[maxlen];int *ptr_w = buff; // 写指针初始化为buff[0]int *ptr_r = null; // 读指针初始化为null// 读数据。成功读出时,返回1,x存放读出的结果。不成功返回0,x的内容不可用int readdata(int buff[],int *x) if(ptr_r == null || ptr_r >= ptr_w) return 0; *x = *ptr_r; ptr_r += buff + (ptr_r - buff + 1) % maxlen; return 1;}// 写数据。成功写入时,返回。不成功返回0int writedata(int buff[],int x) if(ptr_r == null) ptr_r = buff; // 初次写入时,附带完善读指针的初始化操作 *ptr_w++ = x; return 1; } if(ptr_w == ptr_r) return 0; // 缓冲区满 *ptr_w = x; ptr_w += buff + (ptr_w - buff + 1) % maxlen; return 1;}

文章TAG:环形缓冲  环形缓冲区  缓冲  缓冲区  环形缓冲区  
下一篇