[fpc-devel] volatile variables
Michael Schnell
mschnell at lumino.de
Tue Jun 28 15:54:35 CEST 2011
On 06/28/2011 03:16 PM, Jonas Maebe wrote:
>
> The C (or Pascal) compiler has no idea whether or not the global
> variable will be accessed by the pthread_mutex_lock()/unlock()
> function. As a result, it will never cache it in a register across
> function calls, and the call to the mutex function by itself
> guarantees that the variable's value will be written back.
If in C you do
static int x;
void play_with_x(void) {
for (i=100000000; i>0; i--) {
x += 1;
};
x = 0;
};
the compiler will see that x is just defined to be 0 in the end and
optimize out thge complete loop.
But if you do the same with
volatile static int x;
the code will stay and another thread can watch x growing in a time
sharing system.
I believe that inserting some ptherad_mutex... calls will not force the
compiler to bother about some intermediate values of a non volatile
variable.
I believe that with FPC global variables are assumed to be volatile and
not optimized away or cashed in registers. But what about heap-variables ?
>
> Even if it's a local variable you don't need it,
Of course not as they can't be accessed by anybody but the running
thread anyway.
> the compiler again has to assume that any called function may modify
> it via an indirect access.
... if same gets the address (which of course is possible with a global
variable)
Thus true for global variables, not necessary true for static variables
as they can't be accessed by a function defined in another module (I
don't know whether the C compiler makes a difference)
-Michael
More information about the fpc-devel
mailing list