Vinzent Höfler schrieb:

Question is, what makes one variable use read/write-through, while other variables can be read from the cache, with lazy-write?

Synchronisation. Memory barriers. That's what they are for.

And this doesn't happen out of thin air. How else?

Is this a compiler requirement, which has to enforce read/write-through for all volatile variables?

No.  "volatile" (at least in C) does not mean that.

Can you provide a positive answer instead?

I meant "volatile" as read/write-through, not related to C. Read as "synchronized", if you ar more comfortable with that term ;-)

But if so, which variables (class fields...) can ever be treated as non-volatile, when they can be used from threads other than the main thread?

Without explicit synchronisation? Actually, none.

Do you understand the implication of your answer?

When it's up to every coder, to insert explicit synchronization whenever required, how to determine the places where explicit code is required?

Aren't we then in the unpleasant situation, that *every* expression can be evaluated using unsynchronized values, unless the compiler uses synchronized read instructions to obtain *every* value [except from stack]?

DoDi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to