var范围单一的可能的竞争条件?

时间:2011-07-12 17:11:31

标签: coldfusion

我有一个可能的竞争条件与应用程序作用域单例。但是,我认为通过定义一个函数级变量,这不会是一个问题。

<!--- Calling page --->
<cfset url.UUID = createUUID() />
<cfset application.UUIDBot.displayUUID() />


<!--- UUIDbot --->
<cfcomponent>

    <cffunction name="displayUUID">

      <cfset var rc = {} />
      <cfset rc.position = url.uuid />
      <cfinclude template="displayUUID.cfm" />

    </cffunction>
</cfcomponent>

<!--- displayUUID.cfm --->
<cfoutput>#rc.position#</cfoutput>

displayUUID.cfm是否可能无法在URL中显示UUID?

3 个答案:

答案 0 :(得分:1)

问题将出现在您尚未共享的代码中,该代码通过displayUUID.cfm文件包含在内。 displayUUID中的代码不是线程安全的(我猜)。该代码还需要使用“var”来本地化变量 - 或者 - 将引用前缀为“local”。确保他们是当地的scopped。

底线:在函数中使用cfinclude时,包含的代码也必须是线程安全的。

答案 1 :(得分:1)

我已经读过,implict struct notation本身不是线程安全的。

http://www.barneyb.com/barneyblog/2009/06/19/coldfusion-struct-literals-are-not-thread-safe-cfml-ones-are/

尝试将其更改为使用锁定和StructNew。

答案 2 :(得分:1)

您发布的内容是线程安全的。带有结构的线程安全问题发生在分配先前为空的尖头内存时。由于您使用的内置URL范围/结构已经具有有效的地址空间,因此这应该不是问题。

但是,您可能会遇到逻辑和程序执行时间方面的问题。

那就是说,我确实质疑你在这里的推理和设计。它引发了很多危险信号。

cfinclude?为什么?我担心你会走上动态包含的恶劣道路。