On 28 Jun 2011, at 14:32, Michael Schnell wrote:

So, regarding C, I understand that (even in a single CPU environment):

If all accesses to a variable are protected by a MUTEX, multiple threads will use the variable as expected, only if it is defined as volatile. Otherwise is might be cached in registers and one thread's writing to (i C code but not compiled that way) it might be unnoticed by the other thread.

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.

So you don't need volatile. Even if it's a local variable you don't need it, because as soon as you take the address of a local variable and it can escape the current function (and hence the current thread), the compiler again has to assume that any called function may modify it via an indirect access.


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

Reply via email to