2009-11-18 4 views
1

s'il vous plaît considérer les points suivants:Le verrouillage d'une file d'attente tout en re-commande dans Coldfusion

  • J'ai une file d'attente d'objets représentés comme un tableau.

  • Je les processus du haut de la matrice (à la position 1) avant d'appeler arrayDeleteAt() pour le retirer de la matrice.

  • J'ajoute un nouvel élément de file d'attente en haut de le tableau en utilisant arrayAppend().

Cela fonctionne très bien. Cependant, je souhaite maintenant réorganiser le tableau immédiatement après l'ajout d'un élément. Je crains que si un thread sort de la file d'attente, il trouve que l'ordre de la file d'attente a changé entre la position 1 et la suppression de l'élément 1 - parce qu'un article supplémentaire a été supprimé ajouté la file d'attente a été re-triée. Je dois donc m'assurer que ma file d'attente est sûre pour les threads.

Y a-t-il un moyen de le faire en utilisant le tag cflock? Puisque mon code d'ajout et de suppression se trouve à différents endroits dans le code, le thread exécutant un bit de code devrait savoir qu'un thread exécute un autre bit de code spécifique et s'arrêter jusqu'à ce que ce thread ait arrêté d'exécuter son code. Ou est-il préférable de simplement lever un drapeau pendant que le tri est en cours et d'empêcher que quelque chose ne soit retiré de la matrice pendant que le tri est en cours?

Tout cela se produit dans la portée APPLICATION sur un serveur CF 8 Enterprise.

Merci d'avance pour toute aide.

Ciaran

Répondre

3

Un CFLOCK exclusif devrait faire ce que vous voulez. Vous pouvez simplement verrouiller l'APPLICATION, mais cela pourrait être trop large. Probablement préférable de le faire comme un verrou nommé. Peu importe où les différents bits de code avec le verrou sont situés, tant qu'ils utilisent tous le même nom.

+0

Merci. Je ne savais pas ce que vous pourriez avoir plus d'un verrou avec le même nom - j'espérais vraiment que ce serait le cas :) –

+1

@ciaranarcher: Meilleur choix et un nom non ambigu. Les verrous nommés sont à l'échelle du serveur! – Tomalak