Фоновый поток и канал
Считаем в отдельном потоке и получаем результат безопасно.
Код
// Пример: запуск фонового потока (параллельно) и безопасная передача
// результата обратно через канал.
функция главная(): целое
канал из целого канал_результата = создать_канал();
параллельно
целое вычислено = 2 + 2;
канал_результата.отправить(вычислено);
конец
// Ждёт, пока фоновый поток не отправит значение.
целое значение = канал_результата.получить();
вывести(целое_в_текст(значение));
вернуть 0;
конец
Как запустить
Сохраните код в файл, например многопоточность.код, и выполните:
запустить многопоточность.код
Как это работает
- Блок
параллельнозапускает код в настоящем потоке операционной системы. - Из потока данные нельзя просто присвоить обычной переменной. Для этого есть канал:
канал из целогосоздаётся черезсоздать_канал(). получить()ждёт, пока поток что-нибудь отправит, поэтому гонок данных нет.
Исходник лежит в репозитории: examples/многопоточность.код.