请考虑以下事项:
我有一个对象队列 作为一个数组。
我处理它们的顶部
调用之前的数组(在位置1)
arrayDeleteAt()
将其删除
数组。
我在顶部添加了新的队列项
数组使用arrayAppend()
。
这很好用。但是,我现在希望在添加项目后立即重新排序数组。
我担心如果一个线程从队列中取出,它会发现队列顺序在它取得位置1的项目和它删除位置1的项目之间发生了变化 - 因为在那个时候添加了一个额外的项目队列已经重新排序。所以我需要确保我的队列是线程安全的。
有没有办法使用cflock
代码执行此操作?由于我的添加和删除代码位于代码中的不同位置,执行一位代码的线程需要知道一个线程正在执行另一个特定的代码位并停止,直到其他线程停止执行它的代码。
或者我最好只是在排序进行时提出一个标志并防止在排序过程中从阵列中取出任何东西?
所有这些都发生在CF 8企业服务器的APPLICATION
范围内。
提前感谢您的帮助。
夏兰
答案 0 :(得分:3)
独家CFLOCK应该做你想要的。您可以只是范围锁定APPLICATION,但这可能过于宽泛。可能最好将其作为命名锁。只要它们都使用相同的名称,那么锁定代码的不同位置无关紧要。