Я думаю, что «реальный» ответ - начать процесс пополнения, когда запас становится низким, а не когда он полностью истощается. Тогда он уже будет пополнен к тому времени, когда кому-то понадобится заблокировать его. Или, возможно, вы могли бы заставить процесс пополнения работать асинхронно, чтобы новые строки генерировались почти мгновенно, а затем вызывались интеграции. Таким образом, вы ставите в очередь интеграцию, а не потребителей.
Но, исключая это, кажется, что вы хотите, чтобы официанты блокировали «тип элемента» в режиме, несовместимом с тем, как блокировщик перезагружает его. Затем он естественным образом заблокируется и будет выпущен после завершения добавления наполнителя. Проблема в том, что если вы хотите собрать порядка 50 вещей, а 47-й истощается, хотите ли вы сохранить резервирование для предыдущих 46 вещей, пока вы ждете?
Предположительно, ваше бронирование не блокирует кого-либо еще Если только тот, который вы зарезервировали, не будет последним доступным. В этом случае вы на самом деле не блокируете их, просто заставляете их go через процесс пополнения, что в любом случае должно было бы быть сделано в любом случае.