2011-11-03 63 views
3

我正在创建一个新的Rails 3.1项目,我的设计中看到了一些并发风险,我不知道Rails如何处理它。假设我有2个不同的用户(单独会话),并且需要在FIFO基础上分配几个任务(首先应该首先分配第一个创建的任务)。两个用户都登录并接受任务。我担心这可能是将相同的任务分配给两个用户或最后一个执行任务更新的地方。Rails 3.1并发风险

我在担心什么? Rails 3.1如何处理这种情况?我应该在SQL中解决这个问题吗?

回答

2

你需要清楚地定义你的排队逻辑 - 在你的情况下,如果我是正确的分配任务。任何并发系统都必然要经历获取锁和释放对正在执行的对象或实体的锁的循环。在Rails世界中,您从浏览器执行的每个请求都是一个在单独的线程或进程中执行的请求。他们仍然可以竞争和争夺资源。所以,由您来定义这个碰撞解决方案。

这样做的一种方法是使用获取锁的应用程序变量并使用:围绕方法同步(source)。

class SharedCache 
    @@lock = Mutex.new 
    def expire 
    ... 
    end 
    synchronize :expire, :with => :@@lock 
end