是什么阻止了kfifo_put和kfifo_is_empty之间访问__kfifo>的争用条件?



in kfifo.h kfifo_get call call kfifo_is_empty检查是否检查__kfifo-> in == __kfifo_out。同时,添加数据后,kfifo_put在 中执行__kfifo->。既然这是对圆形缓冲区的无锁实现,则使用1个读者和作者,而writer是什么阻止了作者损坏数据,而kfifo_is_empty是在?

中读取__kfifo->的值。

这里没有问题。

简而言之,只有在将数据传输到KFIFO之后,读者才能看到in不等于out 。这是通过执行屏障来实现的,然后再在作者侧增加in计数器。

最新更新