[fpc-pascal] What's the status of RTL and IsMultiThreaded := True?

Sven Barth pascaldragon at googlemail.com
Sat Apr 13 16:36:09 CEST 2013


On 13.04.2013 16:06, Anthony Walter wrote:
> Oh, I just thought of a followup question. If I have to call BeginThread
> to make the memory manager/rtl "thread aware", do I then have to also
> have to check the OS type (and maybe the CPU architecture)

No, you need to do this for every system. BeginThread is supported 
everywhere where threading is supported (and it's used internally by 
TThread).

> and possibly
> add more units? Is it safe to call BeginThread on all
> platforms/architectures using only the System unit?
>

On certain platforms (e.g. Unix ones) you need to add the cthreads unit 
(or whereever the thread manager is implemented).

It's not depending on the platform (though I wouldn't bet on m68k 
supporting threads correctly currently ^^)

> {ifdef $unix}
> { Do I still need this the line below?
>    Do I need to be concerned with different OSes or CPU architectures in
> the line below?
>    Android ARM, Raspberry Pi ARM, OSX, iOS with whatever CPU ... ? }
> uses cthreads;

This line (or a similar one) is needed only on systems where the thread 
manager is not included in the system unit (e.g. not on Windows systems)

> {$endif}
>
> function ThreadFunc(Parameter: Pointer): PtrInt;
> begin
> EndThread(0);
> end;
>
> procedure InitThreadAware;
> begin
>    BeginThread(@ThreadFunc);
> end;

Regards,
Sven



More information about the fpc-pascal mailing list