2010-08-18 57 views
1

我正在研究Ruby中的API集成项目,并且我正在创建一个类方法,以稍微遵循Rails用finder方法所做的事情,但我没有这么做,因为我是有关我可能会引入竞争条件。Ruby类方法中的竞态条件

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

回答

2

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

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

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

+0

是的,我特别关注外部API调用。所以基本上,只要在函数内的任何位置没有任何共享资源,那么我应该可以听起来像。谢谢! – Ruben 2010-08-18 21:02:32