Блокировка очереди при повторном заказе в Coldfusion - PullRequest
1 голос
/ 18 ноября 2009

пожалуйста, примите во внимание следующее:

  • У меня есть очередь объектов как массив.

  • Я обрабатываю их с верхней части массив (в позиции 1) перед вызовом arrayDeleteAt() чтобы удалить его из массив.

  • Я добавляю новый элемент очереди вверху массив используя arrayAppend().

Это отлично работает. Однако теперь я хочу изменить порядок массива сразу после добавления элемента.

Я обеспокоен тем, что если поток извлекает из очереди, он обнаружит, что порядок очереди изменился между тем, как он берет элемент в позиции 1, и удаляет элемент в позиции 1 - потому что за это время был добавлен дополнительный элемент очередь была пересортирована. Поэтому я должен убедиться, что моя очередь является поточно-ориентированной.

Есть ли способ сделать это с помощью тега cflock? Так как мой код добавления и удаления находится в разных местах кода, поток, выполняющий один бит кода, должен знать, что поток выполняет другой определенный бит кода, и останавливаться, пока этот другой поток не перестанет выполнять свой код.

Или мне лучше просто поднять флаг, пока идет сортировка, и предотвратить что-либо из массива, пока идет сортировка?

Все это происходит в области действия APPLICATION на сервере CF 8 Enterprise.

Заранее спасибо за любую помощь.

Киэрэн

1 Ответ

3 голосов
/ 18 ноября 2009

Эксклюзивный CFLOCK должен делать то, что вы хотите. Вы можете просто ЗАКРЫТЬ ПРИЛОЖЕНИЕ, но это может быть слишком широким. Вероятно, лучше сделать это как именованный замок. Не имеет значения, где находятся разные биты кода с блокировкой, если они все используют одно и то же имя.

...