2016-02-27 69 views
0

所以我有這個多線程,遞歸的應用程序。它是用Pharo Smalltalk編碼的,但對於這個問題的邏輯解決方案在大多數語言中可能是相同的。多線程和遞歸

我有4個相同的進程相對同時運行。這是遞歸調用的最後一次迭代。我想打印由遞歸函數計算出來的結果(它是在遞歸函數/消息的參數中修改的字典)。我現在面臨的問題是在遞歸的基本情況終止符中調用打印,所以結果會打印4次。

我嘗試設置一個全局變量,它允許我打印第一個完成的過程的結果,但當然這意味着結果是錯誤的。它需要打印最後一個進程的結果來執行遞歸最後一次迭代中的所有進程。

如何在不深入Process類的情況下解決這個問題?謝謝你的幫助。

+0

而不是設置,讓每個進程[原子]增加全局。當計數達到4個[進程數]時,然後執行打印,因爲每個人都已完成 –

回答

1

你知道線程的數量嗎? (據說,4) 然後你可以使用一個原子長(在Java爲例):

AtomicLong myAtomicLong = new AtomicLong(0); 

... 
... 

// do my work 
if (totalThreadCount == myAtomicLong.getAndIncrement() -1) 
{ 
    //my print 
} 

的增量,得到的是原子,所以最後一個線程要打印,將得到那裏的條件在所有其他線程完成其工作後將是真實的。請注意,在工作完成後進行增量和檢查很重要。

+0

這實際上很有意義 - 我會將您的答覆標記爲答案。謝謝!有關Smalltalk實現的任何線索? – KingDan