如果我有一个带有方法的Generator.cfc:
numeric function next()
{
return variables.num++; // Is ++ an atomic operation??
}
和
application.generator = new generator();
如果每个请求都调用application.generator.next(),那么这个生成器在重载时会生成两次相同的数字吗?换句话说......这是线程安全的吗?如果没有,锁定在哪里?
答案 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是你的朋友。