Do you mean the Observer pattern, or are you just talking about
boost::visit_each? I'm not aware of anything about visit_each that makes
it inherently unusable in a multi-threaded program. Boost.Variant uses
visitors. You could look at the BGL too, which also uses visitors.