Athena::RCUSvc Node1 Athena::RCUSvc + RCUSvc() + initialize() + getNumSlots() + add() + remove() + handle() Node2 extends< AthService, IRCUSvc, IIncidentListener > Node2->Node1 Node3 ServiceHandle< IInterface > Node3->Node1 -m_hiveWhiteBoardSvc Node4 std::recursive_mutex Node4->Node1 -m_mutex Node5 std::unordered_set < IRCUObject * > Node5->Node1 -m_objs Node6 Athena::IRCUObject - m_grace - m_oldGrace - m_nold + IRCUObject() + IRCUObject() + IRCUObject() + IRCUObject() + operator=() + operator=() + ~IRCUObject() + quiescent() + quiescent() # endGrace() # setGrace() # mutex() # clearAll() # clearOld() # makeOld() - endGrace() Node6->Node5 +keys Node7 std::atomic< bool > + ptr Node7->Node6 -m_dirty Node8 Athena::IRCUSvc + DeclareInterfaceID() + newrcu() + add() + remove() + getNumSlots() Node8->Node6 -m_svc Node10 std::mutex Node10->Node6 -m_mutex Node11 ServiceHandle< IIncident Svc > Node11->Node1 -m_incidentSvc