2011-05-11 78 views
6

將引用計數對象發送給其他線程時,在啓動線程之前或在線程內增加計數是否更好?遞增引用計數的經驗法則是什麼?

從更一般的意義上說,我(作爲一個函數)是否應該假設傳遞給我的參數已經被計入了?

+0

這是什麼技術參考?不同的技術可能有不同的答案。 (@closevoter:對我來說似乎是一個真正的問題,可能需要一點澄清,但是...) – 2011-05-11 12:37:14

+0

好點,我特指C,但我認爲它可能適用於任何不有本地實施的參考計數。 – 2011-05-11 12:39:08

回答

4

在傳遞對象的新線程內遞增計數幾乎肯定是錯誤的。 「父」線程中的任意數量的代碼可能會在新的「子」線程運行之前運行,在這種情況下,「父」中的函數可能會返回,執行其他操作,將引用計數遞減爲0 ,並釋放該對象。然後新的線程會觸發無效的內存,調用未定義的行爲,並且所有的地獄都會破壞。

此外請注意,這樣的錯誤很可能會在很長一段時間內未被發現,因爲新線程不會立即運行,這在統計上是不尋常的。事實上,它可能會是您的客戶/客戶誰首先看到錯誤... :-)

+0

謝謝!這是我無法想象的那一塊......關於父母在孩子可以主張之前釋放參考的一點點。 – 2011-05-11 13:52:34