list head在应用程序中的使用和注意事项

<script type="text/javascript"> </script> <script type="text/javascript"> </script>

转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>

 

list head在应用程序中的使用和注意事项

 

kernel中经常使用的 list head 连接件,在一般的应用程序中也有很好的应用价值,这里做个笔记。

 

list head 里面只有prev, next,而没有数据部分,这个是它和我们一般用法上的linked list的最大的不同,而且它也要灵活很多 。

例子代码:/usr/src/linux-headers-2.6.28-11-generic/include/linux/list.h

 

而且 list_entry 的做法也很特殊。

 

我们可以自己写个小程序验证一下 list entry 的特性。

 

这里可以看出对指针 &(((struct test_s*)0)->b) 的访问是允许的,而对其中所对应的内容进行访问是非法的。

 

注意事项:

1、线程安全

在实际的使用中,还要特别注意 list_for_each_safe 的使用,需要指出的是,list_for_each_safe 对多线程是不安全的,它只是在当前单一进程是safe的。

如果在多线程中使用,就需要自己加 lock 来保护对 list 的操作。

2、list 中 head 的位置

从这个循环中,我们可以看到 pos 是从 head->next开始的,直到不为 head 结束,也就是说,list 里是有 head 的,这个和一般的 linked list 也有不同,一般地操作是从第一个操作到最后一个,而 list head 却不是。

这个主要是由于 head 没有对应的 entry,所以是跳过它来对其他 pos 来操作的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值