在kfifo.h中,kfifo_get调用kfifo_is_empty来检查__kfifo-> in == __kfifo_out。同时kfifo_put在添加数据后在++中执行__kfifo->。由于这是一个带有1个读写器的循环缓冲区的无锁实现,当kfifo_is_empty正在读取__kfifo->的值时,什么会阻止编写器破坏数据?
答案 0 :(得分:0)
这里没有问题。
简而言之,只有在数据传输到kfifo后,读者才会看到in
不等于out
。这是通过在作者端递增in
计数器之前执行 barrier 来实现的。