2010-09-30 17 views
2

Étant donné le scénario suivant, j'aimerais savoir si functionOneLock se libère avant le déclenchement de functionTwoLock, ou attend-il que functionTwoLock se libère en premier?Quelle est la séquence correcte dans laquelle cflock se libère lors de l'utilisation de plusieurs verrous dans différentes fonctions?

<!--- 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> 

Répondre

2

Je suppose que vous appelez functionOne() de functionTwo(), comme ceci:

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

Puisque vous utilisez les verrous nommés, votre thread d'exécution entrerez functionOneLock alors à l'intérieur qui appellent l'autre fonction entrant ainsi functionTwoLock . Il complétera ensuite le code dans ce verrou avant de revenir de cette fonction et de compléter functionOneLock. Donc pour répondre à votre question functionOneLock devra attendre functionTwoLock pour compléter.

espoir qui aide.

+0

Ciaran, une petite question, existe-t-il un moyen de déclencher la seconde fonction sans attendre qu'elle se termine? Devrais-je inclure le dans un tag ? – Mohamad

+0

Oui, si vous utilisez le multithreading, vous pouvez le faire. Vous pouvez utiliser 'cfthread' pour lancer un thread et le code appelant n'attendra pas ce thread, c'est un processus totalement séparé. Si vous faites cela, gardez un œil sur vos paramètres de threads dans l'admin des FC! –