В стандартной библиотеке появился канал передачи ровно одного значения
05.01.2026В стандартную библиотеку добавлен канал передачи ровно одного значения: один отправитель, один получатель, отправка происходит один раз.
Зачем это писали сами
Схема «передать значение один раз и забыть» встречается постоянно: запустить задачу и передать ей результат, отдать распоряжение воркеру и дождаться ответа. Реализовывали её одинаково — структура с блокировкой и флагом «значение уже забрали».
Обычно это ещё и ошибка: под блокировкой проверяется, не забрано ли значение, и если не забрано — оно кладётся. Между проверкой и укладкой другой поток может успеть забрать, и тогда новое значение теряется. Правильная реализация требует взять блокировку до проверки и укладки вместе, а это легко сделать не так.
Что даёт канал
Готовую структуру, где эта ошибка невозможна по построению. Отправитель отдаёт значение один раз, получатель забирает один раз, повторное получение даёт пустое значение.
Положение дел
Канал экспериментальный. В самом изменении открыты нерешённые вопросы: как он должен вести себя при взаимодействии с обычными каналами и что означает безопасность при передаче между потоками.
Оригинал
This PR adds an experimental oneshot module.
Упоминаний: 1 · Просмотров: 3