|
文件: |
cycle_buffer.rar |
大小: |
3KB |
下载: |
下载 | |
|
文件: |
cycle_buffer_simple.tar.gz |
大小: |
4KB |
下载: |
下载 | |
回想自己刚接触kernel的时候, 真是可怜, 身边连个指导的人 , 公司旁边的那个家伙老是问一句答一句, 这也正常, 因为大家是同事关系吗 , 他凭什么培训我呢?
经过4年, 自己对kernel还算是有了一些了解, 也要带新人入门kernel , 感觉自己真的是世界上最好心的leader , 每天挖空心思的写适合新人循序渐进和提高的例子, 锻炼他们, 让入门。
假如我刚毕业的时候 ,别人给我一个特好的例子, 并像我这样像老师批改作业似的, 我真就俄弥陀佛了 。
现在的年轻人太不知道珍惜了。 !~
cycle_buffer.rar 是先实现了一个简单的环形队列, 然后利用唤醒+等待队列 反复操作缓冲区, 确保写的时候 ,可以写最多, 读的时候一次多最多。
cycle_buffer_simple.tar.gz 是直接就利用 读写锚 来做的, 相当于把 唤醒功能什么的, 和唤醒队列混到 一起了, 代码实现起来比杂 , 有点乱。 不过功能比上面强, 上面的最大可写 MAXSIZE-1个字节, 下面这个可以写MAXSIZE 个字节。
实现复杂的环形buffer的功能
/*
* Author:
* Copyright (C) 2007 Bob Zhang
*
* 作业名称:
* 实现一个环形的缓冲区|外加一个pipe的功能
*
* 功能要求:
* buffer的空间是有限的,但是又必须满足大于buffer空间的写入要求
* 实现一个类似管道的功能, 当数据被read以后, 数据就不存在了
* 无数据可读,读进程要睡眠,等待写进程唤醒
* buffer满了,写进程要阻塞,直至被read进程读完以后唤醒(但是read进程不一定一次性读走所有的数据,这就要求writer进程不能
* 覆盖刚才还没有读完的数据
*
*
* 实现提示:
* 可以用一个数组,模拟cycle buffer
* 用两个锚来标记读和写的位置,看下图
* 读和写的时候,注意读锚和写锚的位置
* |______R______W___________________| 和
* |______W______R___________________|
*
* 性能:
* 要写满所有的剩余空间(不要覆盖未读的数据)
阅读(3727) | 评论(4) | 转发(0) |