У кучи появилось извлечение вершиши по условию

31.01.2026

У кучи появился метод, который извлекает вершину, только если она удовлетворяет условию. Пока помечен как нестабильный.

Какая была запись

Посмотреть на вершину, решить, подходит ли она, и при необходимости извлечь — три вызова. Проблема в том, что между ними вершина может измениться: в многопоточном коде между чтением и извлечением другой поток вставит элемент.

Обходной путь — извлечь и положить обратно, если не подошла. Это работает, но неверно при панике между шагами: элемент извлечён и не возвращён.

Что даёт метод

Проверка и извлечение одной операцией, без промежуточного состояния. Элемент не извлекается, если условие не выполнено, — то есть проверка действительно ничего не меняет.

Где это нужно

Обработка очереди с приоритетом, где элементы определённого типа должны обслуживаться первыми. Снятие задач по расписанию: брать только те, что созрели.

Оригинал

Implementation of rust-lang/rust#151828

Упоминаний: 1 · Просмотров: 2