[fpc-devel] Threading support and C library under Linux/Unix

Mattias Gaertner nc-gaertnma at netcologne.de
Wed Jun 23 17:18:54 CEST 2010


On Wed, 23 Jun 2010 17:12:29 +0200
Michael Schnell <mschnell at lumino.de> wrote:

> On 06/23/2010 04:49 PM, Henry Vermaak wrote:
> > On 23/06/10 15:26, Michael Schnell wrote:
> >>
> >> Other ARMs (including thumb2) uses a loop with result compare. AFAIK
> >> this does not work reliably. I am not sure it it's really true that ARM
> >
> > No, SWP is atomic, so the implementation looks good (at a glance).
> >
> 
> even if that is true there is a problem:
> 
> // lock
>   ldr r12, .Lfpc_system_lock
>   mov r3, #1
> .Lloop:
>   swp r3, r3, [r12]
>   cmp r3, #0
>   bne .Lloop
> // do the job
> 
>  - thread 1 comes in and sets fpc_system_lock to 1
>  - now thread 2 is scheduled and comes in
>  - fpc_system_lock is set so it enters a busy spinning
> 
> unfortunately we are in a "realtime" system and the priority of thread 2
> is set higher than that of thread 1 and thus thread 1 never gets a CPU
> cycle as thread 2 is busy and thus we have a dead-lock.

What system has such an unfair scheduler?


Mattias



More information about the fpc-devel mailing list