Linux内核中的队列

我一直在寻找一个通用的内核实现队列的信息,也就是先进先出的数据结构。 我认为可能有一个,因为它可能是常见的使用,并有一个链接列表的标准(以list_head结构的forms)。 有没有一些标准的队列实现,我找不到,或者只是使用链表作为队列,希望最好?

Solutions Collecting From Web of "Linux内核中的队列"

你是对的,Linux内核通常使用链表来实现队列。 这是有道理的,因为链表提供了所需的行为。 从kernel / workqueue.c看到这个例子:

INIT_LIST_HEAD(&wq->list); // ... case CPU_UP_CANCELED: list_for_each_entry(wq, &workqueues, list) { if (!per_cpu_ptr(wq->cpu_wq, hotcpu)->thread) 

你在找include / linux / kfifo.h吗? 从标题:

一个简单的内核FIFO实现。

无论如何,这是相当新的,所以不难找到链接列表的直接用法。 另外,它们有一个完全不同的实现(FIFO被实现为循环缓冲区),因此它们具有不同的应用程序。

还要注意,它们的设计考虑了多线程用法(考虑到生产者/消费者队列),但是您可以在不使用__kfifo_put / __ kfifo_get锁定的情况下使用它们。

顺便说一句:我记得我在lwn.net上了解了他们 – 书签:lwn.net/coreel/Index,并阅读关于kfifo :-)的条目。

从你的前内核开发者,Blaisorblade

您似乎将抽象(fifo队列)与实现(链接列表)相混淆。 它们并不相互排斥 – 事实上,排队通常是作为链接列表实现的 – 没有“希望最好的”。