zoukankan      html  css  js  c++  java
  • linux环形缓冲区kfifo剩余容量详解

    有很多帖子说: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
  • 相关阅读:
    尺取法 C
    并查集
    欧拉路与欧拉回路
    C
    最大连续区间和算法总结
    C
    python中的random函数方法
    Python可视化
    MFC学习之模态对话框和非模态对话框
    dropna
  • 原文地址:https://www.cnblogs.com/workharder/p/12660311.html
Copyright © 2011-2022 走看看