队列的操作中,一般都是为每一个队列写一个队列操作函数,普通的程序多写几个队列操作函数可能并不会增加太多的负担,但是对于Linux内核,里面使用了很多的队列操作,如果为每个队列都写一个队列操作函数这将是一件很多麻烦的事。所以我们想是否可以写一个模板让适合于所有的队列操作。
当然是可行的,看一下linux内核中是如何实现的吧!
定义一个结构体当作寄宿者:
12345struct list_head{struct list_head *next;struct list_head *prev;};
- 再定义一个宿主:
|
|
通过将寄宿者寄宿在宿主中,我们就可以只对寄宿者进行队列操作。
现在我们还要思考一个问题,就是我们只是对寄宿者进行队列操作,那我们如何在知道寄宿者指针的情况下找到宿主呢?其实这个问题还是很简单地,现在我们知道了寄宿者的指针位置要找到宿主的指针地址,只要知道寄宿者的指针相对于宿主指针的偏移量就可以了。下面给出代码:
|
|
其中d就是list相对于page的偏移量。