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小时前,