当前位置: 技术问答>linux和unix
如何写一个单向循环链表作缓存
来源: 互联网 发布时间:2016-10-02
本文导语: 我也不知道是否应该用单向循环链表作,先说说我想要实现的功能。 一个存储区,两个线程。 一个线程住里面写数据,一个线程从里面读数据。 写数据的时候,如果读进程没有写进程快,则会出现存储区被写满,...
我也不知道是否应该用单向循环链表作,先说说我想要实现的功能。
一个存储区,两个线程。
一个线程住里面写数据,一个线程从里面读数据。
写数据的时候,如果读进程没有写进程快,则会出现存储区被写满,这个时候写进程继续写,但是要写去最早写进去的而末被读出来的数据。
读数据的时候,是要读最早写进去的数据,读完了数据之后,要使那个存储区有用,使写进程可以往里面写数据。
请问类似实现这样的功能,要注意哪些问题,
比如,如果用单向循环链表,感觉如果循环不次,会忘记头在哪里啦。
写的时间是不是要加锁?
有哪个开源项目例子可以参考一下(最好是C的)。
一个存储区,两个线程。
一个线程住里面写数据,一个线程从里面读数据。
写数据的时候,如果读进程没有写进程快,则会出现存储区被写满,这个时候写进程继续写,但是要写去最早写进去的而末被读出来的数据。
读数据的时候,是要读最早写进去的数据,读完了数据之后,要使那个存储区有用,使写进程可以往里面写数据。
请问类似实现这样的功能,要注意哪些问题,
比如,如果用单向循环链表,感觉如果循环不次,会忘记头在哪里啦。
写的时间是不是要加锁?
有哪个开源项目例子可以参考一下(最好是C的)。
|
不用链表这么复杂吧?
我感觉用一个数组就可以。设一个读指针和写指针,分别记录当前读/写的位置。初值都是0,每次读/写之后加1,到达最大位置就回0
我感觉用一个数组就可以。设一个读指针和写指针,分别记录当前读/写的位置。初值都是0,每次读/写之后加1,到达最大位置就回0
|
lz可以参考一下linux内核中的缓存的实现过程
分配一块内存 然后把内存分成N个块 每个块作为一块小buffer来使用
同时设置一个struct buffer_head来管理这些内存 可以用链表或者hash表都组织这些buffer_head
分配一块内存 然后把内存分成N个块 每个块作为一块小buffer来使用
同时设置一个struct buffer_head来管理这些内存 可以用链表或者hash表都组织这些buffer_head
|
感觉循环链表的想法不错
加锁肯定是需要的了
加锁肯定是需要的了
|
以前也写过类似的,就按照1楼的方法,应该没什么问题