Потокобезопасный генератор последовательных чисел в ColdFusion? - PullRequest
0 голосов
/ 28 ноября 2009

Если у меня есть Generator.cfc с методами:

numeric function next()
{
    return variables.num++;   // Is ++ an atomic operation??
}

И

application.generator = new generator();

Если каждый запрос вызывает application.generator.next (), будет ли этот генератор когда-либо генерировать один и тот же номер дважды при большой нагрузке? Другими словами ... это потокобезопасно? Если нет, то где должен быть замок?

Ответы [ 3 ]

5 голосов
/ 30 ноября 2009

Вы также можете заглянуть в класс Java 5 Атомное целое число

Код ColdFusion, который вам нужен, выглядит примерно так (я не проверял его):

<cfset i = createObject("java", "java.util.concurrent.atomic.AtomicInteger").init(startValue) />
<cfset newValue = i.incrementAndGet() />
4 голосов
/ 28 ноября 2009

Вы можете сделать его атомарным, заключив инкремент в замок. Поскольку ++ требует трех операций (выборка, добавление, сохранение), я не думаю, что это атомарно само по себе на любой платформе.

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

Да, как указала Донни, КЛЛОК - ваш друг здесь.

...