[Saga-devel] saga SVN commit 3324:
/trunk/saga/saga/adaptors/utils/
Hartmut Kaiser
hkaiser at cct.lsu.edu
Sat Jan 17 14:28:12 CST 2009
> User: amerzky
> Date: 2009/01/17 10:37 AM
>
> Modified:
> /trunk/saga/saga/adaptors/utils/
> utils.cpp
>
> Log:
> don't optimize - C++ static initialization and threads don't go
> along very well it seems
Thread safe initializations of statics is complex in any language. It's
definitely not a C++ problem. C suffers from the same subtleties. All global
data needs to be protected in multithreaded environments. And initialization
of globals in multi threaded environments is tricky to say the best.
But it is possible, you just have to know how to make it happen. Joao wrote
a nice helper class based on Boosts init_once facility for doing exactly
this
(saga/external/boost/spirit/boost/spirit/core/non_terminal/impl/static.hpp).
Regards Hartmut
BTW: you don't need the 'bool have_localhosts' anymore. As every invocation
of this functions get's its own copy of the vector anyways.
> A
>
> File Changes:
>
> Directory: /trunk/saga/saga/adaptors/utils/
> ===========================================
>
> File [modified]: utils.cpp
> Delta lines: +2 -6
> ===================================================================
> --- trunk/saga/saga/adaptors/utils/utils.cpp 2009-01-17 16:08:08 UTC
> (rev 3323)
> +++ trunk/saga/saga/adaptors/utils/utils.cpp 2009-01-17 16:37:19 UTC
> (rev 3324)
> @@ -177,14 +177,10 @@
> // a '.' in its name.
> std::vector <std::string> get_localhosts (void)
> {
> - // scoped lock, to protect the static variables
> - boost::recursive_mutex mtx_;
> - boost::recursive_mutex::scoped_lock lock (mtx_);
> -
> // optimization: build this list only once - we assume that
> host names
> // do not change during the runtime of the SAGA application.
> - static std::vector <std::string> localhosts;
> - static bool have_localhosts = false;
> + std::vector <std::string> localhosts;
> + bool have_localhosts = false;
>
>
> std::set <std::string> initial_names;
>
> _______________________________________________
> saga-devel mailing list
> saga-devel at cct.lsu.edu
> https://mail.cct.lsu.edu/mailman/listinfo/saga-devel
More information about the saga-devel
mailing list