Boost logo

Boost :

From: Vladimir Prus (vladimir_at_[hidden])
Date: 2008-07-28 11:15:10

David Abrahams wrote:

> on Mon Jul 28 2008, Vladimir Prus <> wrote:
>> Robert Ramey wrote:
>>> The reason I ask is that the serialization library uses
>>> spirit to parse xml archives. Recently, I made changes
>>> to make the library thread-safe. I did this without using
>>> mutexes/locks by confine all non-const operations to
>>> construction and destruction and using static object
>>> constructed/destructed at pre-main and post main
>>> time time. Although the jury is still out on this, I believe
>>> it will make the serialization library thread safe without
>>> the need for using threading primitives and libraries.
>> What happens if one explicitly loads a dynamic library, which uses
>> serialization? I'd guess the types serialized by that library should
>> be added to the global table of serialized type (at least for types
>> marked with BOOST_CLASS_EXPORT), so it's non-const operation done
>> after main. Am I missing something?
> Suggestion: handle that by deferring the availability of the
> registrations associated with that DLL until the user explicitly says
> it's safe to add them. The idea is that every DLL adds things to its
> local registry and in a MT application, that is only combined with the
> global registry via an explicit call, when presumably the user knows no
> threads are doing serialization.

How deferring registration of serialization is better/easier than deferring
loading of DLL itself. Suppose that application, in response to user's action,
decides to load a plugin and call a function there, *now*. Then, either you need

   - load DLL
   - call a function


   - load DLL
   - tell it to register all serialized classes
   - call a function

and if should be done while some other thread is potentially busy doing the same,
I don't really see practical difference between those two approaches.

- Volodya

Boost list run by bdawes at, gregod at, cpdaniel at, john at