ColdFusion中的线程安全序列号生成器?

时间:2009-11-28 03:00:36

标签: coldfusion

如果我有一个带有方法的Generator.cfc:

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

application.generator = new generator();

如果每个请求都调用application.generator.next(),那么这个生成器在重载时会生成两次相同的数字吗?换句话说......这是线程安全的吗?如果没有,锁定在哪里?

3 个答案:

答案 0 :(得分:5)

您还可以查看Java 5类Atomic Integer

你需要的ColdFusion代码是这样的(我还没有测试过):

<cfset i = createObject("java", "java.util.concurrent.atomic.AtomicInteger").init(startValue) />
<cfset newValue = i.incrementAndGet() />

答案 1 :(得分:4)

您可以通过将增量包装在锁中来使其成为原子。由于++需要三个操作(获取,添加,存储),我认为它在任何平台上都不是原子的。

答案 2 :(得分:3)

是的,Donnie指出CFLOCK是你的朋友。