
I wonder if the 'signal' lib is thread-safe? i.e. a publisher is doing something, at the same time a subscriber is trying to 'disconnect' from the slot, will it get problem? Found that it only set a flag to indicate the slot in disconnection, but never remove the slot? So that the lib is thread-safe? ********************** It won't remove anything from the 'slots' container: template<typename Function> void do_disconnect(const Function& f, mpl::bool_<false>) { // Notify the slot handling code that we are iterating through the slots BOOST_SIGNALS_NAMESPACE::detail::call_notification notification(this->impl); for (iterator i = impl->slots_.begin(); i != impl->slots_.end(); ++i) { slot_function_type& s = *unsafe_any_cast<slot_function_type>(&i->second); if (s == f) i->first.disconnect(); } }