請考慮以下幾點:鎖定一個隊列中的Coldfusion
我有對象的隊列表示 爲陣列。
我打電話
arrayDeleteAt()
從 數組中刪除它之前處理它們關閉 陣列(位置1)的頂部。我使用
arrayAppend()
在 的頂部添加新隊列項。
這工作正常。但是,我現在希望在添加項目後立即重新排列數組。
我擔心的是,如果一個線程正在從隊列中取出,它會發現隊列順序在它取得位置1處的項目和刪除位置1處的項目之間發生了變化 - 因爲在那段時間附加項目已經添加的隊列已被重新排序。所以我需要確保我的隊列是線程安全的。
有沒有什麼辦法可以使用cflock
標籤來做到這一點?由於我的添加和刪除代碼位於代碼中的不同位置,因此執行一位代碼的線程需要知道某個線程正在執行另一特定位的代碼,並暫停,直到其他線程停止執行它的代碼。
還是我最好在排序正在進行的時候提高一個標記,並且在排序過程中防止從數組中取出任何東西?
所有這些都發生在CF 8企業服務器上的APPLICATION
範圍內。
在此先感謝您的幫助。
Ciaran
謝謝。我不知道你可以有多個同名的鎖 - 我真的希望這會是這種情況:) – 2009-11-18 15:53:18
@ciaranarcher:更好的選擇和明確的名字。命名鎖是服務器範圍內的! – Tomalak 2009-11-18 16:02:18