[fpc-devel] M68k: important milestone reached
    Sven Barth 
    pascaldragon at googlemail.com
       
    Mon Feb 24 19:33:41 CET 2014
    
    
  
On 24.02.2014 18:11, Michael Schnell wrote:
> CPI32 (and Fido) has add and sub instruction with memory source and
> Target.:-)
The problem is that InterlockedIncrement and -Decrement return the value 
after increment/decrement. Thus (with interrupts enabled) there could be 
the following problem:
Assume this inline assembly code for InterlockedIncrement (target is the 
"var" argument of the function):
lea target, a0
addq.l (a0), 1
move.l (a0), result
move.l result, target
Now there could be an interupt between addq and move and the OS might 
decide to run a different thread (in case of Linux or Amiga this is 
definitely possible). This other thread *might* do an 
InterlockedIncrement for the same variable as well and might also at 
least finish the addq instruction. Now the first thread can run again 
and the move.l will contain a value after *two* increments. Or worse the 
other thread might have done a InterlockedDecrement and now the target 
value will be the same as before (keep in mind: var parameter!).
Without the possibility to synchronize the access (I include disabling 
interupts here ;) ) there will always be race conditions for 
InterlockedIncrement/-Decrement and the other Interlocked* functions.
Regards,
Sven
    
    
More information about the fpc-devel
mailing list