Какова правильная последовательность, в которой освобождается cflock при использовании нескольких блокировок в разных функциях? - PullRequest
2 голосов
/ 30 сентября 2010

Учитывая следующий сценарий, я хотел бы знать, освобождается ли functionOneLock перед тем, как будет запущен functionTwoLock, или он будет ждать, пока functionTwoLock не выпустит первый?

<!--- functionOne() --->
<cffunction name="functionOne">
<cflock name="functionOneLock" type="exclusive">
   <!--- do something --->
   <cfset functionTwo()>
</cflock>
</cffunction>

<!--- functionTwo() --->
<cffunction name="functionTwo">
<cflock name="functionTwoLock" type="exclusive">
   <!--- do something here --->
</cflock>
</cffunction>

1 Ответ

2 голосов
/ 30 сентября 2010

Полагаю, вы звоните functionOne() из functionTwo(), вот так:

<!--- functionOne() --->
<cffunction name="functionOne">
<cflock name="functionOneLock" type="exclusive">
   <!--- do something --->
   <cfset functionTwo() />
</cflock>
</cffunction>

Поскольку вы используете именованные блокировки, ваш поток выполнения введет functionOneLock, а затем в рамках этого вызова другая функция введет functionTwoLock. Затем он завершит код в этой блокировке, прежде чем вернуться из этой функции и завершить functionOneLock.

Таким образом, чтобы ответить на ваш вопрос, functionOneLock придется ждать завершения functionTwoLock.

Надеюсь, это поможет.

...