[fpc-devel] volatile variables
Michael Schnell
mschnell at lumino.de
Thu Jun 30 15:04:58 CEST 2011
On 06/30/2011 11:31 AM, Hans-Peter Diettrich wrote:
>
>
> Consider the shareable bi-linked list, where insertion requires code
> like this:
> list.Lock; //prevent concurrent access
> ... //determine affected list elements
> new.prev := prev; //prev must be guaranteed to be valid
> new.next := next;
> prev.next := new;
> next.prev := new;
> list.Unlock;
I really would like to see a test case proving my assumption wrong that
this in fact just woks
We found that
- my original "volatile" question is invalid, as the function calls
done with list.lock and list.unlock are a "volatile barrier" preventing
the compiler from caching some value inappropriately in a register,
simply because they are function calls.
- the MUTEX operations done with list.lock and list.unlock (at least
on PCs in Linux and Windows) use library calls that includes memory
barriers
- if the potential cache incoherency would not be handled by Hardware
/ OS / Libraries on behalf of user land programs, I feel that this would
so disastrous and ubiquitous that it result in so many programs not
working on SMP systems that it would be a really well known issue.
-Michael
More information about the fpc-devel
mailing list