21 #include "libmesh/libmesh_singleton.h"
22 #include "libmesh/threads.h"
23 #include "libmesh/simple_range.h"
37 SingletonMutex singleton_mtx, setup_mtx;
41 typedef std::vector<Singleton *> SingletonList;
43 SingletonList & get_singleton_cache()
45 static SingletonList singleton_cache;
46 return singleton_cache;
49 typedef std::vector<Singleton::Setup *> SetupList;
50 SetupList & get_setup_cache()
52 static SetupList setup_cache;
67 SingletonMutex::scoped_lock lock(singleton_mtx);
69 get_singleton_cache().push_back (
this);
76 get_setup_cache().push_back (
this);
83 SingletonMutex::scoped_lock lock(setup_mtx);
85 SetupList & setup_cache = get_setup_cache();
87 for (
auto & item : setup_cache)
98 SingletonMutex::scoped_lock lock(singleton_mtx);
100 SingletonList & singleton_cache = get_singleton_cache();
102 for (
auto & item :
as_range(singleton_cache.rbegin(),
103 singleton_cache.rend()))
110 singleton_cache.clear();