ngx_rbtree_sentinel_init
定义在 src\core\ngx_rbtree.h
c
#define ngx_rbt_black(node) ((node)->color = 0)
/* a sentinel must be black */
#define ngx_rbtree_sentinel_init(node) ngx_rbt_black(node)
初始化哨兵节点的颜色
将哨兵节点(node
)的颜色强制设置为黑色(color = 0
)。
- 红黑树性质要求 :
红黑树的两条核心性质与哨兵节点相关:- 根节点必须是黑色。
- 所有叶子节点(NIL 节点,即哨兵)必须是黑色。
通过 ngx_rbtree_sentinel_init
,Nginx 确保哨兵节点在初始化时满足第二条性质。
哨兵节点是红黑树的"叶子占位符",所有真实节点的空子节点(left
/right
)均指向哨兵。
-
哨兵的作用 :
哨兵节点作为所有叶子节点的"空值替代品",避免了空指针判断。
-
初始化哨兵的必要性 :
在树初始化时,根节点(
root
)和所有空子节点均指向哨兵。若哨兵颜色不合法(如未初始化为黑色),后续插入/删除操作可能直接违反红黑树性质。