[fpc-devel] Threading support and C library under Linux/Unix
Michael Schnell
mschnell at lumino.de
Wed Jun 23 17:12:29 CEST 2010
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.
-Michael
More information about the fpc-devel
mailing list