[1, 2, 3, 4, 5] - когда кто-то что-то делает с цифрой 1, он взят. Потом нужно отозвать взятие или выкинуть из массива. Соответственно следующий чувак читает 1, видит что он взят, берет 2
на перебор этого массива уходит очень мало времени, поэтому получается параллельная работа
ну нормально. есть подобный функционал. итого получается, что либо проца написана криво. либо надо по другому подготавливать данные с которыми работает процедура. костыли, подобные тому что были сделаны - это не решение проблемы.