[fpc-pascal]Crashes with multithreading

Michael.VanCanneyt at Wisa.be Michael.VanCanneyt at Wisa.be
Mon Dec 11 22:52:04 CET 2000

On Mon, 11 Dec 2000, Nico Erfurth wrote:

> >> 
> >> JM> FPC's heap manager and IO functions (writeln/readln) are *not* thread 
> >> JM> safe. That's probably what's causing the crashes. Add the cmem unit (from 
> >> JM> the "packages" units) as the first unit in your "uses" clause, then 
> >> JM> you're at least safe on the memory management side. You can't use heaptrc 
> >> JM> with it though.
> >> Thank you for such fast reply. But if IO operations not thread safe,
> >> does it means that all file operations also unsafe ?
> > Shortly said: Yes. The only solution for this is to use separate
> > streams in each thread, then it'll work fine.
> The problem is, nothing in FPC is threadsafe, even the TThread-Class 
> itself (InitThreads/DoneThreads).
> The FPC-Team really needs to make the RTL and all other classes 
> threadsafe. Its nearly impossible to trace errors in threaded applications.

That is not entirely true; the Belgian national phone company collects data
from their telephone stations using a multi-threaded Win32 application 
written in FPC. 

After changing the standard memory manager with the memory manager of 
Windows itself the application runs very stable. It is just a matter
of programming it right; there are some small parts that require some
attention (such as file IO) but most of the RTL is thread-safe.

The biggest problems are IOResult and the heap manager.
Avoiding these two makes FPC apps pretty thread-safe.

Which of course doesn't mean we won't work on thread-safety :-)


More information about the fpc-pascal mailing list