我现在正在做一个项目,项目是在内核中操作链表。该项目将实现一个“玩具”锁定机制,其中所有锁都在链表中。请帮助我解决以下问题:
1)如何在内核中创建链表?我可以使用功能吗?或者只是malloc()等?
2)锁定在此项目中按“锁定组名称”分组,这是否意味着应该有多个链接列表,每个链接列表代表一个“锁定组”?谢谢!
答案 0 :(得分:2)
1) queue(3)手册页记录了sys / queue.h中一些非常有用的宏,实现了列表和尾部队列。此标头也可在内核中使用。
malloc(9)手册页中记录的内核内存分配。通常它就像用户级malloc一样,但附加 type 参数可用于查找内存泄漏。您的代码应如下所示:
MALLOC_DEFINE(M_MYMALLOC, "mydata", "Some data");
struct foo {
SLIST_ENTRY(foo) chain;
};
struct foo *bar = malloc(1000, M_MYMALLOC, M_WAITOK);
SLIST_INSERT_HEAD(&head, bar, chain);
SLIST_REMOVE_HEAD(&head, chain);
free(var, M_MYMALLOC);
2)如果不知道项目背景下的“分组”含义,就很难回答这个问题。