什么阻止kfifo_put和kfifo_is_empty之间的竞争条件来访问__kfifo-> in?

时间:2017-09-29 02:41:06

标签: linux-kernel

在kfifo.h中,kfifo_get调用kfifo_is_empty来检查__kfifo-> in == __kfifo_out。同时kfifo_put在添加数据后在++中执行__kfifo->。由于这是一个带有1个读写器的循环缓冲区的无锁实现,当kfifo_is_empty正在读取__kfifo->的值时,什么会阻止编写器破坏数据?

1 个答案:

答案 0 :(得分:0)

这里没有问题。

简而言之,只有在数据传输到kfifo后,读者才会看到in不等于out 。这是通过在作者端递增in计数器之前执行 barrier 来实现的。