CFLOCK:使用范围是什么?

时间:2018-11-29 13:17:38

标签: coldfusion coldfusion-2016

我有一个为下一个事件生成令牌的函数。我们称这个eventID。这是数字形式,但由于业务原因而存储为varchar。可以从应用程序中的多个位置调用此函数,并且为了避免争用条件,以避免为不同的用户生成相同的ID,添加了应用程序范围锁。但是在少数情况下,仍会为2个不同的事件生成相同的ID。

<cffunction name="getEventID" returntype="string">
  <cfset var newID = "">
  <cflock scope="Application" timeout="5" throwontimeout="true">
   <cfquery name="qry" datasource="#DSN#">
     SELECT TOP 1 CONVERT(int, eventID) AS eventID
     FROM events WHERE ISNUMERIC(eventID) = 1
     ORDER BY CONVERT(int, eventID) DESC  
   </cfquery>
  <cfset newID = qry.eventID + 1>
 </cflock>
<cfreturn newID>
</cffunction>

CFLOCK的实现是否有问题?

0 个答案:

没有答案