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