【发布时间】:2008-11-19 14:15:43
【问题描述】:
我想知道是否需要锁定在应用程序范围内创建的一些代码。如果我在应用程序范围内创建一个对象说 userDAO.cfc,那么它可用于所有页面。那么如果我在该对象中有一个方法说 getUserInfo(userID) 将在应用程序的不同部分调用,我是否需要锁定这个方法?
【问题讨论】:
标签: coldfusion locking shared-memory
我想知道是否需要锁定在应用程序范围内创建的一些代码。如果我在应用程序范围内创建一个对象说 userDAO.cfc,那么它可用于所有页面。那么如果我在该对象中有一个方法说 getUserInfo(userID) 将在应用程序的不同部分调用,我是否需要锁定这个方法?
【问题讨论】:
标签: coldfusion locking shared-memory
简短的回答:可能不会。
如果该对象是在 Application.cfc 的 OnApplicationStart() 方法中在应用程序范围内创建的,并且它永远不会更改,并且您确保为所有函数更改所有变量,那么您将不需要锁定对它的访问。
在这种情况下,OnApplicationStart() 会为您进行锁定,并且在创建该方法之前不会让任何人继续操作。这很好,因为它只允许创建一次项目,并确保它在其他人使用它之前就存在。
如果您从其他任何地方实例化该对象,例如某个随机页面的顶部,那么是的,您需要将它锁定在这里,以及引用它的任何地方。
如果对象会变成另一个对象,或者如果它保持任何状态,例如私有或公共变量(变量。* 或 this.*)会变成其他东西,您可能希望在外部锁定它,或者您可以尝试在每个变量的基础上将其锁定在 cfc 中。
最后,如果您不更改所有变量 (use Mike Schierberl's varScoper!),那么您将更改对象的状态。你永远不应该真的走到这一步,但这是一个锁定的案例。
如果您使用的是 CF 5 或更低版本,则必须锁定任何共享范围访问权限;如果您使用的是 CF 6 或 6.1,则没有 Application.cfc。
【讨论】: