您的位置:首页 > Web前端

list_for_each_safe()

2010-10-25 14:46 253 查看
如果在遍历过程中,包含有删除或移动当前链接节点的操作,由于这些操作会修改遍历指针,这样会导致遍历的中端。这种情况下,必须使用list_for_each_safe宏,在操作之前将遍历指针缓存下来。内核中解释的精华部分:

/*

list_for_each_safe -iterate over a list safe against removal of list entry

*/

#define list_for_each_safe(pos,n,head)/

for(pos=(head)->next,n=pos->next;pos!=(head);pos=n,n=pos->next)

在for循环中n暂存pos下一个节点的地址,避免因pos节点被释放而造成的断链。也就是说你可以遍历完当前节点后将其删除,同时可以接着访问下一个节点,遍历完毕后就只剩下一个头节点。这就叫safe。典型用途是多个进程等待在同一个等待队列上,若事件发生时唤醒所有进程,则可以唤醒后将其一次从等待队列中删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: