2013-02-14 48 views
2

在使用Python的Google App Engine上,我正在尋找競爭條件問題的解決方案,即多個用戶同時嘗試增加某個計數器。我發現其中兩個:transactions中描述的increment_counter()和compare-and-set中的bump_counter()。 我的問題:1)他們都完全解決了種族問題? 2)如果是這樣,哪一個更好?谷歌應用引擎:解決競爭條件?交易或比較和設置?

此外,有些機構可能會詳細闡述它們中的每一個,因爲我看不出代碼如何解決問題。例如,1)在increment_counter()事務期間,如果另一個用戶更新計數器,事務將會失敗? 2)類似地,在compare-and-set中的bump_counter()期間,如果另一個用戶更新計數器,client.cas()會失敗嗎?

回答

3
  1. 是的,他們都可以消除競爭條件。

  2. 第一個是使用數據存儲,第二個memcache。所以他們不能相提並論。 Memcache是​​不穩定的,可以在任何時候清除 - 你不應該使用它來存儲永久數據。所以在這方面數據存儲交易更好。此外,事務可以確保一組實體的原子性,而compare_and_set僅確保一個memcache值的原子性。

  3. 交易不做阻塞。如果他們檢測到碰撞,他們就會失敗,您需要將其回滾並自己重複一次。

  4. 同上memcache:你需要自己重複這個過程。

+0

想到了!非常感謝您的明確解釋。 – 2013-02-14 07:39:53