Фоновый поток и канал

Считаем в отдельном потоке и получаем результат безопасно.

Код

// Пример: запуск фонового потока (параллельно) и безопасная передача
// результата обратно через канал.
функция главная(): целое
    канал из целого канал_результата = создать_канал();

    параллельно
        целое вычислено = 2 + 2;
        канал_результата.отправить(вычислено);
    конец

    // Ждёт, пока фоновый поток не отправит значение.
    целое значение = канал_результата.получить();
    вывести(целое_в_текст(значение));

    вернуть 0;
конец

Как запустить

Сохраните код в файл, например многопоточность.код, и выполните:

запустить многопоточность.код

Как это работает

  • Блок параллельно запускает код в настоящем потоке операционной системы.
  • Из потока данные нельзя просто присвоить обычной переменной. Для этого есть канал: канал из целого создаётся через создать_канал().
  • получить() ждёт, пока поток что-нибудь отправит, поэтому гонок данных нет.

Исходник лежит в репозитории: examples/многопоточность.код.