gpt4 book ai didi

LINUX LISH.H list_for_each 无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:45 26 4
gpt4 key购买 nike

我正在尝试实现一个 task_struct 列表并将其用作 FIFO。此外,我需要一个函数来遍历列表并搜索特定任务。

我的问题是 list_for_each 宏陷入无限循环。

下面是我的代码片段:

typedef struct task_list_node {
struct list_head next;
struct task_struct *task;
} task_list_node;

task_list_node * find(struct semaphore *sem)
{
struct list_head * next;
struct list_head task_list = sem->task_list;

list_for_each(next, &task_list) {
task_list_node * elem;
// Get a pointer to the element on the list
elem = list_entry(next, task_list_node, next);

// [...]

}
return(NULL);
}

提前感谢您的任何提示!

最佳答案

list_for_each() 本身没问题。

#define list_for_each(pos, head) \
for (pos = (head)->next; pos != (head); pos = pos->next)

问题是:struct list_head task_list = sem->task_list;

您正在创建如下结构:

    |--------------------------------------------------------
\/ |
head #a "sem->task_list" ---element 1 .... element #N -----
^
head #b "task_list" -------------|

list_for_each() 应该在 "pos"== head #a 时停止,但您没有使用 head #a "sem->task_list" 进行迭代,但是 head #b "task_list",所以停止条件是 "pos"== "task_list" 没有达到。

应该像这样修复:

list_for_each(next, &sem->task_list) {

关于LINUX LISH.H list_for_each 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21877721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com