Re: How to create a volatile std::string?
On Jan 31, 8:11 pm, Juha Nieminen <nos...@thanks.invalid> wrote:
I have some data inside a struct instance in a namespace and I
want to initialize that data before spawning a thread which
will read that data. In order to make sure that the data will
indeed get written before the other thread reads it (ie. to
make sure the compiler doesn't perform some funny
optimizations which will mess things up) I make that struct
Which will change exactly nothing. If the compiler is Posix
compliant (or Windows compliant), and claims that it can be used
for multithreaded code, then none of its optimizations will move
writes accross pthread_create (or its Windows equivalent).
Posix forbids it. If the compiler isn't compliant, or doesn't
claim usability in a multithreaded environment (e.g. g++
pre-3.0), then you can't use it, volatile or not. (In g++
2.95.2, for example, the constructor of std::string modified
static variables---without a lock, of course.)
The problem is: The struct has some std::strings inside it. I
can't assign anything to these strings (at least not with
gcc). I just get an error that there's no matching operator=.
Without the 'volatile' there's no error.
Is it simply impossible to assign anything to a volatile
Yup. If volatile were to mean anything (it doesn't, really, in
g++, at least on a Sparc or an Intel platform), then the code
generated in operator= would have to be different. In general,
volatile isn't intended to have any real meaning for complex
types, and in practice, at least for the compilers I have access
to(Sun CC, g++, and VC++), it doesn't have any real meaning for
basic types either.
James Kanze (GABI Software) email:email@example.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34