【问题标题】:Race conditions in Ruby class methodsRuby 类方法中的竞争条件
【发布时间】:2011-03-31 08:45:19
【问题描述】:

我正在使用 Ruby 开发一个 API 集成项目,我正要创建一个类方法以在一定程度上遵循 Rails 对 finder 方法所做的事情,但我没有这样做,因为我担心我可能会引入一场比赛条件。

我不会在成员变量中存储任何内容,只是使用类方法实例化对象并进行外部 API 调用,因此所有内容都将在本地范围内(在类方法内)。尽管如此,当多个线程通过此类方法时,是否存在竞争条件的可能性? Rails finder 类方法如何避免这种情况?还是我在这里没有理解更基本的东西?

【问题讨论】:

    标签: ruby-on-rails ruby race-condition


    【解决方案1】:

    您可能不了解线程是如何工作的,或者您没有描述问题的某些部分,这将成为竞争条件的根源。

    仅仅在两个不同的线程中调用一个方法并不足以导致竞争条件。除非有一些共享资源可能因为另一个线程正在使用它而处于不一致的状态,否则竞争条件并不是真正的问题。

    如果您的所有变量都限定为该方法,那么我可以从您对问题的描述中收集到的唯一竞争来源可能是 API 调用。如果有可能当一个线程在访问 API 的过程中,另一个线程通过并重新启动正在进行的任何交互,这将是有问题的,那么您可能会遇到竞争问题。

    【讨论】:

    • 是的,我特别关心外部 API 调用。所以基本上,只要函数内的任何一点都没有任何共享资源,那么我应该没问题。谢谢!
    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2017-07-13
    • 2010-10-09
    相关资源
    最近更新 更多