下载此文档

循环缓冲区.doc


文档分类:IT计算机 | 页数:约9页 举报非法文档有奖
1/9
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/9 下载此文档
文档列表 文档介绍
循环缓冲区1循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前提是,生产者和消费2都只有一个的情况下,否则也要加锁。下面就内核中提取出来,而经过修改后的fifo进3行简要的分析。45先看其只要数据结构:6structmy_fifo{7unsignedchar*buffer;/*thebufferholdingthedata*/8unsignedintsize;/*thesizeoftheallocatedbuffer*/9unsignedintin;/*dataisaddedatoffset(in%size)*/10unsignedintout;/*dataisextractedfromoff.(out%size)*/11};12也不用多说,一看就明白。size,in,out都设成无符号型的,因为都不存在负值的情13型。1415/*16formkernel/*/1819#include<>20#include<>21#include<>2223#definemin(a,b)((a)<(b)?(a):(b))24/*25my_fifo_init26*/27structmy_fifo*my_fifo_init(unsignedchar*buffer,unsignedintsize)28{29structmy_fifo*fifo;303132fifo=malloc(sizeof(structmy_fifo));33if(!fifo)34returnNULL;3536fifo->buffer=buffer;37fifo->size=size;38fifo->in=fifo->out=0;3940returnfifo;41}42这个初始化fifo结构的函数一般也不会在应用层里进行调用,而是被下面的fifo_alloc43调用。依我的观点来看,这两个函数合成一个函数会更加的清晰,但是这一情况只针对buffer是系统开辟的空间,如果buffer的空间是由其它的函数来提供,就只能用上面的这个函数。44/*45my_fifo_alloc46*/47structmy_fifo*my_fifo_alloc(unsignedintsize)48{49unsignedchar*buffer;50structmy_fifo*ret;5152/*53*rounduptothenextpowerof2,sinceour'lettheindices54*wrap'*/5657buffer=malloc(size);58if(!buffer)59returnNULL;6061ret=my_fifo_init(buffer,size);6263if(ret==NULL)64free(buffer);6566returnret;67}68/*69*my_fifo_free70*/71voidmy_fifo_free(structmy_fifo*fifo)72{73free(fifo->buffer);74free(fifo);75}7677这两个函数也不作过多的分析,都很清晰。78/*79my_fifo_put()80*/81unsignedintmy_fifo_

循环缓冲区 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数9
  • 收藏数0 收藏
  • 顶次数0
  • 上传人文库旗舰店
  • 文件大小39 KB
  • 时间2019-11-25