有很多帖子说:out 始终不会大于 in,我想说未必吧,out可能会大于in,但是并不影响结果。
kfifo源码 fifo->size - fifo->in + fifo->out 是剩余容量,不管in和out谁大谁小,差值加上fifo->size一定是剩余容量。
原因是:三者(fifo->size、fifo->in、fifo->out)数据类型都是unsigned int,要溢出就一起溢出。
解释:
假设数据,
fifo->size = 32;
fifo->in = 2;
fifo->out = 42949672953;
那么,fifo->size - fifo->in + fifo->out的结果是,28。
快拿笔写下来几个知识点:
1.fifo->size,fifo->in,fifo->out 都为unsigned int 类型。
2.fifo->size必须是2的N次幂
3.smp_rmb和smp_mb是要有的,如果是单生产单消费类型可以去掉这个锁
4.当fifo->in == fifo->out 时,这俩同时置为0,这样再次put和out时,加的快
smp_mb