> -- Comdiv писал(а):
> Надёжная многопоточность в императивных программах может быть только в виде изолированных друг от друга потоках, общающихся обменом сообщений.
С этим согласен.

> -- Comdiv писал(а):
> Разделять память в прямом виде они между собой не должны.
С этим не совсем согласен.
Если память не разделять, то необходимо копировать все передаваемые сообщения. Допустим, есть какая-то большая структура данных, которая занимает 500 Мб, чтобы параллельный компонент что-то мог бы с ним сделать, необходимо передать ему эту структуру, то есть произойдет копирование 500 Мб памяти, а затем в обратную сторону еще раз копирование 500 Мб. Если же разделять память, то достаточно просто передать один указатель и отметить у себя в потоке, что пока другой поток не перестанет с ним работать, то с этой структурой данных ничего делать нельзя. И в обратную сторону также будет передан только один указатель.

Есть еще аргументы в пользу разделения памяти. Допустим, в разные моменты времени у программы, может быть несколько потоков (Аналог параллельного запуска нескольких компонент через parbegin и завершения после parend). Допустим, при старте программы, запускается один поток, который что-то инициализирует, а затем запускает несколько потоков, которые параллельно работают. Если память не разделять, то для передачи данных от основной программы в потоки также будет необходимо копировать все данные. Затем, если потоки поработали и сформировали какой-то результат, то при завершении этих потоков и при возврате снова в однопоточный режим, опять нужно будет копировать данные.