中读取__kfifo->的值。
in kfifo.h kfifo_get call call kfifo_is_empty检查是否检查__kfifo-> in == __kfifo_out。同时,添加数据后,kfifo_put在 中执行__kfifo->。既然这是对圆形缓冲区的无锁实现,则使用1个读者和作者,而writer是什么阻止了作者损坏数据,而kfifo_is_empty是在?
这里没有问题。
简而言之,只有在将数据传输到KFIFO之后,读者才能看到in
不等于out
。这是通过执行屏障来实现的,然后再在作者侧增加in
计数器。