2010-08-18 43 views
1

我正在研究Ruby中的API集成項目,並且我正在創建一個類方法,以稍微遵循Rails用finder方法所做的事情,但我沒有這麼做,因爲我是有關我可能會引入競爭條件。Ruby類方法中的競態條件

我不會在成員變量中存儲任何東西,只是使用類方法實例化對象並進行外部API調用,因此所有內容都將在本地作用域內(在類方法中)。但是,當多線程通過這個類方法時,是否存在競爭條件的潛在可能? Rails finder類的方法如何避免這種情況?或者我在這裏沒有更深層次的理解某些東西?

回答

2

有可能你不理解線程是如何工作的,或者你沒有描述可能成爲競爭條件源的問題的某些部分。

僅僅在兩個不同的線程中調用方法不足以導致競爭條件。除非有一些共享資源可能處於不一致狀態,因爲另一個線程正在使用它,競爭條件並不是真正的問題。

如果你所有的變量都被限制在方法範圍內,那麼我可以從你對問題的描述中收集到的唯一競爭來源可能是API調用。如果有可能一個線程正在訪問API的過程中,另一個線程會通過並重新啓動任何正在進行的交互,並且這會有問題,那麼您可能會遇到種族問題。

+0

是的,我特別關注外部API調用。所以基本上,只要在函數內的任何位置沒有任何共享資源,那麼我應該可以聽起來像。謝謝! – Ruben 2010-08-18 21:02:32