夜雨聆风学习资料网

ARTICLE · 998596

FastDDS 源码(1)WaitSet 机制

FastDDS 源码(1)WaitSet 机制

FastDDS 源码(1)WaitSet 机制

FastDDS 的 WaitSet,说白了就是个线程“闹钟”。

它专门盯着各种 Condition(条件)。只要条件满足,就把阻塞的线程叫醒。

核心就靠三样东西互相配合:

Condition:是个抽象基类,不能直接实例化。它里头藏了个关键的 Notifier。
GuardCondition:具体子类。调用 set_trigger_value(true) 就能触发唤醒。
WaitSetImpl:真正干活的。它负责挂起线程,或者把线程叫醒。

它们是怎么串起来的?

当 WaitSet 盯上某个 Condition 时,会把自己登记到它的 Notifier 里。

一旦 Condition 被触发,Notifier 就会挨个敲门。把登记过的所有 WaitSet 全叫醒。

有个细节挺关键:

一个 Condition 能被多个 WaitSet 同时盯着。这意味着,一件事能同时叫醒好几个线程。

搞懂这套“闹钟”怎么响,后面看 ROS2 的 Executor 源码就轻松多了。

原文FastDDS 源码(1)WaitSet 机制
北京,20小时前,

相关学习资料