[fpc-pascal] Is TFPList thread safe?

José Mejuto joshyfun at gmail.com
Fri Oct 3 12:27:28 CEST 2014


El 03/10/2014 a las #4, Xiangrong Fang escribió:

> I don't intend to do any optimization. I just think that I need to enter
> a critical section, add item to the list, then leave the critical section.
>

Hello,

You must protect with a CriticalSection, "Add" and any other kind of 
access, like indexed access. As you must protect indexed access you are 
in the same penalty as using TThreadList.

Threading example to a crash (numbers are execution steps):

Thread 1
--------
1-Resolve TList data access to $00010000
2-calculate item 23 is at $00010023
3-Read $00010023
4-Crash or read from unalocated memory (content undefined).

Thread 2
--------
1-Enter "Add" function and resolve Tlist data to $00010000
2-Lock thread and find that it need to relocate data to $00020000. Move data
3-Unlock
4-Continue

-- 




More information about the fpc-pascal mailing list