我有一个可能的竞争条件与应用程序作用域单例。但是,我认为通过定义一个函数级变量,这不会是一个问题。
<!--- 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?
答案 0 :(得分:1)
问题将出现在您尚未共享的代码中,该代码通过displayUUID.cfm文件包含在内。 displayUUID中的代码不是线程安全的(我猜)。该代码还需要使用“var”来本地化变量 - 或者 - 将引用前缀为“local”。确保他们是当地的scopped。
底线:在函数中使用cfinclude时,包含的代码也必须是线程安全的。
答案 1 :(得分:1)
我已经读过,implict struct notation本身不是线程安全的。
尝试将其更改为使用锁定和StructNew。
答案 2 :(得分:1)
您发布的内容是线程安全的。带有结构的线程安全问题发生在分配先前为空的尖头内存时。由于您使用的内置URL范围/结构已经具有有效的地址空间,因此这应该不是问题。
但是,您可能会遇到逻辑和程序执行时间方面的问题。
那就是说,我确实质疑你在这里的推理和设计。它引发了很多危险信号。
cfinclude?为什么?我担心你会走上动态包含的恶劣道路。