2009-11-18 84 views
1
而重新排序它

請考慮以下幾點:鎖定一個隊列中的Coldfusion

  • 我有對象的隊列表示 爲陣列。

  • 我打電話 arrayDeleteAt()從 數組中刪除它之前處理它們關閉 陣列(位置1)的頂部。

  • 我使用arrayAppend()在 的頂部添加新隊列項。

這工作正常。但是,我現在希望在添加項目後立即重新排列數組。

我擔心的是,如果一個線程正在從隊列中取出,它會發現隊列順序在它取得位置1處的項目和刪除位置1處的項目之間發生了變化 - 因爲在那段時間附加項目已經添加的隊列已被重新排序。所以我需要確保我的隊列是線程安全的。

有沒有什麼辦法可以使用cflock標籤來做到這一點?由於我的添加和刪除代碼位於代碼中的不同位置,因此執行一位代碼的線程需要知道某個線程正在執行另一特定位的代碼,並暫停,直到其他線程停止執行它的代碼。

還是我最好在排序正在進行的時候提高一個標記,並且在排序過程中防止從數組中取出任何東西?

所有這些都發生在CF 8企業服務器上的APPLICATION範圍內。

在此先感謝您的幫助。

Ciaran

回答

3

獨家CFLOCK應該做你想做的。你可以只是範圍鎖定應用程序,但可能過於寬泛。可能最好將它作爲一個指定的鎖。只要它們全部使用相同的名稱,鎖定代碼的不同位置位於何處無關緊要。

+0

謝謝。我不知道你可以有多個同名的鎖 - 我真的希望這會是這種情況:) – 2009-11-18 15:53:18

+1

@ciaranarcher:更好的選擇和明確的名字。命名鎖是服務器範圍內的! – Tomalak 2009-11-18 16:02:18