2013-04-14 70 views
3

跨線程釋放內存是一種不好的做法嗎?這樣一個線程分配內存,退出後,將指針傳遞給主線程以釋放內存。我覺得答案是肯定的,但我只是想知道。跨線程釋放內存

在我的代碼中這樣做的目的是讓主線程在釋放內存之前可以用內存做一些其他的事情。在我的情況下,有很多解決方法,我完全可以使用它。但有一個線程返回void *到一塊內存可以,在我的情況下,使代碼非常方便。

編輯:我知道這樣做沒有技術缺陷。

回答

8

線程通過控制分配給另一個線程的內存是沒有錯的。例如,在生產者/消費者模型中,生產者線程爲其生成的任何內容分配內存,然後將該內存的控制權交給消費者線程供消費者線程使用和釋放將是非常合理的。

+0

at 207k,我肯定會接受這個建議haha – tay10r

+5

將207k視爲癡呆的症狀 - 對SO的癡迷上癮。 –

+0

我接受你的回答,因爲這是唯一一個回答第一句話中的問題的帖子。 – tay10r

2

所有線程共享一個共同的堆。只要其他線程在釋放時使用內存完成,哪個線程分配或釋放內存並不重要。

1

動態內存使用自帶的,你是在完全控制它一個責任,這是用戶的責任明確地管理動態分配對象的生存期並確保其釋放一旦對象的預期壽命結束。在不同線程中使用的動態分配內存塊沒有任何問題。同一進程中的所有線程共享相同的堆區域。唯一需要注意的是,對象的生命週期是明確定義和範圍的。

4

這不是「壞習慣」,只要是有意義的數據流模型,特別是你的程序對對象生命週期的要求,但它可以產生費用。許多現代分配器使用線程局部舞臺,其中在同一線程中分配和釋放對象不會導致同步損失,但將其釋放到不同的線程中會強制同步或產生其他成本。我不會因爲這個原因而改變你的設計,除非它是一個主要的瓶頸,但是考慮到這個實現細節,你也可以考慮其他設計,例如讓線程將其輸出存儲在參數中的父線程提供的緩衝區中線程啓動功能。