何时在应用程序范围内使用锁定

时间:2008-11-19 14:15:44

标签: coldfusion locking shared-memory

我想知道是否需要锁定在应用程序范围内创建的一些代码。如果我在应用程序范围内创建一个对象说userDAO.cfc,那么它可用于所有页面。然后,如果我在该对象中有一个方法说getUserInfo(userID)将在应用程序的不同部分调用,我是否需要锁定此方法?

1 个答案:

答案 0 :(得分:4)

简短回答:可能不是。

如果在Application.cfc的OnApplicationStart()方法中在应用程序范围内创建了该对象,并且它永远不会更改,并且您确保为所有函数更改所有变量,那么您将不需要锁定对它的访问。

在这种情况下,OnApplicationStart()会为您执行锁定,并且在创建该方法之前不会让任何人继续操作。这很好,因为它只允许一次创建项目,并确保它在其他人使用之前就已存在。

如果你从其他任何地方实例化对象,比如某个随机页面的顶部,那么是的,你需要在这里锁定它,以及引用它的所有地方。

如果对象将变为另一个对象,或者它保持任何状态,如私有或公共变量(变量。*或此。*)变为其他东西,您可能想要将其锁定在外部,或者您可以尝试在每个变量的基础上将其锁定在cfc中。

最后,如果你没有变量你的所有变量(use Mike Schierberl's varScoper!),那么你将改变对象的状态。你永远不应该真正达到这一点,但这是锁定的一种情况。

如果您使用CF 5或更低版本,整个事情的大例外是,在这种情况下,必须锁定任何共享范围访问,如果您使用CF 6或6.1,则在这种情况下没有Application.cfc。