好吧,我替你找到出處了:linux源碼。/***hlist_bl_for_each_entry_rcu-iterateoverrculistofgiventype*@tpos:thetype*touseasaloopcursor.*@pos:the&structhlist_bl_nodetouseasaloopcursor.*@head:theheadforyourlist.*@member:thenameofthehlist_bl_nodewithinthestruct.**/#definehlist_bl_for_each_entry_rcu(tpos,pos,head,member)\for(pos=hlist_bl_first_rcu(head);\pos&&\({tpos=hlist_bl_entry(pos,typeof(*tpos),member);1;});\pos=rcu_dereference_raw(pos->next))#endif這是hlist_bl_for_each_entry_rcu的定義。我們?cè)趯?duì)比一下list_for_each_entry_rcu的定義:/***list_for_each_entry_rcu-iterateoverrculistofgiventype*@pos:thetype*touseasaloopcounter.*@head:theheadforyourlist.*@member:thenameofthelist_structwithinthestruct.**Thislist-traversalprimitivemaysafelyrunconcurrentlywith*the_rculist-mutationprimitivessuchaslist_add_rcu()*aslongasthetraversalisguardedbyrcu_read_lock().*/#definelist_for_each_entry_rcu(pos,head,member)\for(pos=list_entry((head)->next,typeof(*pos),member);\prefetch(rcu_dereference(pos)->member.next),\&pos->member!=(head);\pos=list_entry(pos->member.next,typeof(*pos),member))pos&&是短路求值,可以檢查是否為空NULL,此時(shí)返回1,可以防止提前結(jié)束。