История изменений
Исправление vbr, (текущая версия) :
Отдаёшь два итератора, которые имеют общий лок и доступ к исходному итератору.
Первый итератор возвращает значения, которые удовлетворяют условию, пока не наткнётся на значение, которое не удовлетворяет. В этот момент итератор блокируется, пока второй итератор не вызовется, не пройдёт по значениям, которые не удовлетворяют условию и не наткнётся на значение, которое удовлетворяет. В этот момент первый итератор разблокируется, а второй заблокируется.
Соответственно использовать эти итераторы нужно в двух разных потоках.
Это всё для Java-подобных итераторов, для которых не предусмотрена работа в неблокирующем режиме (т.е. вернуть специальное значение из разряда «попробуйте позже»).
Исходная версия vbr, :
Отдаёшь два итератора, которые имеют общий лок и доступ к исходному итератору.
Первый итератор возвращает значения, которые удовлетворяют условию, пока не наткнётся на значение, которое не удовлетворяет. В этот момент итератор блокируется, пока второй итератор не вызовется, не пройдёт по значениям, которые не удовлетворяют условию и не наткнётся на значение, которое удовлетворяет. В этот момент первый итератор разблокируется, а второй заблокируется.
Соответственно использовать эти итераторы нужно в двух разных потоках.
Это всё для Java-подобных итераторов, для которых не предусмотрена работа в неблокирующем режиме (т.е. вернуть специальное значение из разряда «попробуйте позже»)/