10.1. Введение

На верх  Назад  Вперёд

Free Pascal поддерживает потоковое программирование: имеется языковая конструкция, доступная для хранения локальных потоков (ThreadVar), и кросс-платформенные низкоуровневые потоковые процедуры для операционных систем, которые поддерживают потоки.

Все процедуры для работы с потоками доступны в модуле system в виде менеджера потоков. Менеджер потоков должен выполнять некоторые основные процедуры, которые должна поддерживать RTL. Для Windows по умолчанию менеджер потоков встроен в модуль system. Для других платформ менеджер потоков должен подключаться непосредственно программистом. На системах, где доступны потоки posix, модуль cthreads управляет менеджером потоков, который использует библиотеку потоков C POSIX. Для таких систем не существует родной библиотеки pascal.

Хотя это не запрещено делать, не рекомендуется использовать специфические для конкретной системы потоковые процедуры: языковая поддержка для многопоточных программ не будет включена, это означает, что потоковые переменные не будут работать, менеджер кучи будет «глючить», что может привести к серьёзным программным ошибкам.

Если не будет поддержки потоков в «бинарнике», использование потоковых процедур или создание потока приведёт к ошибке времени выполнения 232.

Для LINUX (и других Unixes ) менеджер потоков C может быть включен вставкой модуля cthreads в блоке подключения модулей в программе. Если это не сделать, то программа с использованием потоков будет выдавать ошибку при старте. Необходимо, чтобы этот модуль был вставлен как можно раньше в списке модулей в блоке uses.

В будущем менеджер потоков может быть реализован без использования Libc.

В следующих разделах описано программирование потоков, защита доступа к общим данным всех используемых критических секций потоков (кросс-платформенная). В заключении более подробно будет описан менеджер потоков.