Ruby类方法中的竞争条件

时间:2010-08-18 05:16:43

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

我正在使用Ruby中的API集成项目,我正在创建一个类方法来稍微遵循Rails对finder方法所做的事情,但我没有这么做,因为我担心我可能会引入一场比赛条件。

我不会在成员变量中存储任何内容,只是使用类方法实例化对象并进行外部API调用,因此所有内容都将在本地作用域(在类方法中)。但是,由于多线程通过此类方法,是否存在竞争条件的可能性? Rails finder类方法如何避免这种情况?或者我不是在更基本的层面上理解某些东西?

1 个答案:

答案 0 :(得分:2)

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

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

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