Free Pascal supports thread programming: There is a language construct available for thread-local storage (ThreadVar), and cross-platform low-level thread routines are available for those operating systems that support threads.
All routines for threading are available in the system unit, under the form of a thread manager. A thread manager must implement some basic routines which the RTL needs to be able to support threading. For Windows, a default threading manager is integrated in the system unit. For other platforms, a thread manager must be included explicitly by the programmer. On systems where posix threads are available, the cthreads unit implements a thread manager which uses the C POSIX thread library. No native pascal thread library exists for such systems.
Although it is not forbidden to do so, it is not recommended to use system-specific threading routines: The language support for multithreaded programs will not be enabled, meaning that threadvars will not work, the heap manager will be confused which may lead to severe program errors.
If no threading support is present in the binary, the use of thread routines or the creation of a thread will result in an exception or a run-time error 232.
For linux (and other Unixes), the C thread manager can be enabled by inserting the cthreads unit in the program’s unit clause. Without this, threading programs will give an error when started. It is imperative that the unit be inserted as early in the uses clause as possible.
At a later time, a system thread manager may be implemented which implements threads without Libc support.
The following sections show how to program threads, and how to protect access to data common to all threads using (cross-platform) critical sections. Finally, the thread manager is explained in more detail.