Once upon a time, on 02/07/2013 01:46 PM to be precise, Jonas Maebe said:
>
> On 07 Feb 2013, at 13:39, Ewald wrote:
>
>> Well, I always thought that the InterLoackedCompareExchange boiles down
>> to [**]
>> .Lock CMPXCHG
>>
>> Or something quite like that. The `.Lock` there is the important part
>> since this does insure a memory barier.
>
> It's only a memory barrier if you don't use SSE (or write-combined
> memory, but that's generally only the case for memory mapped video
> memory or so, and more of an issue for kernel mode code than for user
> space).
Alright, this is getting interesting ;-) Yet I wonder:
InterlockedCompareExchange is atomic, then you need to find a way to
make sure that only one processor core (one thread in general) is
accessing the memory that contains the integer/pointer. So, since
InterlockedCompareExchange does not necessarily makes use of a memory
barrier, how could it be done?

Also, in case I misunderstood you and you are trying to say that if I
write using some instruction to a part of memory that contains or is
contained the integer/pointer (so there is some memory overlap) then
yes, I agree and it isn't a memory barrier anymore. But then again, who
writes data to a locking variable other then the code that does the
locking? (same goes for a simple `lock:= 5;` for example)

> Furthermore, FPC supports many more architectures than just x86, and
> on (virtually?) all other platforms the instructions for atomic
> accesses do not automatically imply any kind of memory barrier.
Of course, I only used this piece of pseudo-assembly since it conveys
the message enough to understand each other.

-- 
Ewald

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

Reply via email to