避免使用不當pthread_create函式造成記憶體洩露
pthread_create使用不當會造成記憶體洩漏,對於記憶體不大的開發板會造成嚴重後果。
問題:dlna主程式中使用pthread_create建立兩個執行緒scan和inotify,造成記憶體佔用率過大,導致crash。
產生根源:pthread_create預設建立的執行緒是非detached的。
預防方式:要麼建立detached的執行緒,要麼在非detached執行緒結束之前detached,或者在主程式中join。
執行緒的分離狀態決定執行緒以什麼樣的方式來終止自己。執行緒的預設屬性是非分離狀態,這種情況下,主程式等待新程式結束,只有當pthread_join函式返回時,新程式才終止,才會釋放所佔有系統資源。而分離執行緒則不同,不會被主程式等待,執行結束程式也就終止,立即釋放系統資源。pthread_create建立的程式預設是分配8M左右的記憶體空間,該引數可調整,使用不當回造成改記憶體空間一直被佔用,直至主程式結束才一起釋放。
避免記憶體洩露的幾種使用方法:
方法一、建立detached的執行緒
-
void run() {
-
return;
-
}
-
-
int main(){
-
pthread_t thread;
-
pthread_attr_t attr;
-
pthread_attr_init( &attr );
-
pthread_attr_setdetachstate(&attr,1);
-
pthread_create(&thread, &attr, run, 0);
-
- //......
-
return 0;
- }
方法二、執行緒結束之前detached
-
void run() {
-
pthread_detach(pthread_self());
-
}
-
-
int main(){
- pthread_t thread;
-
pthread_create(&thread, NULL, run, 0);
-
- //......
-
return 0;
- }
方法三、主執行緒使用pthread_join
-
void run() {
-
return;
-
}
-
-
int main(){
- pthread_t thread;
- pthread_create(&thread, NULL, run, 0);
- //......
- pthread_join(thread,NULL);
-
return 0;
- }
相關文章
- 避免使用Handler而造成的記憶體洩漏記憶體
- 如何避免JavaScript的記憶體洩露及記憶體管理技巧JavaScript記憶體洩露
- Android 如何避免 Context 記憶體洩露AndroidContext記憶體洩露
- c++ 虛解構函式[避免記憶體洩漏]C++函式記憶體
- 記憶體洩露記憶體洩露
- JavaScript 記憶體洩露的4種方式及如何避免JavaScript記憶體洩露
- js記憶體洩露JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- [譯] RxJS: 避免 takeUntil 造成的洩露風險JS
- Microsoft.Extensions.DependencyInjection中的Transient依賴注入關係,使用不當會造成記憶體洩漏ROS依賴注入記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Android中使用Handler造成記憶體洩露的分析和解決Android記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- javascript中容易造成記憶體洩漏和使用不善的幾個操作JavaScript記憶體
- Java面試題:細數ThreadLocal大坑,記憶體洩露本可避免Java面試題thread記憶體洩露
- Android中使用Thread造成記憶體洩露的分析和解決Androidthread記憶體洩露
- dealloc不呼叫造成記憶體洩漏記憶體
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- js記憶體洩露的原因JS記憶體洩露
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露
- IE中的記憶體洩露記憶體洩露
- 學習Java:記憶體洩露Java記憶體洩露
- C++關於一個函式中new記憶體洩露的列子C++函式記憶體洩露
- 記一次Go websocket 專案記憶體洩露排查 + 使用Go pprof定位記憶體洩露GoWeb記憶體洩露
- 記憶體洩漏-原因、避免和定位記憶體
- LeakCanary 傻瓜式的記憶體洩露檢測工具記憶體洩露
- LeakCanary傻瓜式的記憶體洩露檢測工具記憶體洩露
- 閉包會造成記憶體洩漏嗎?記憶體
- Android 記憶體洩露詳解Android記憶體洩露
- 線上記憶體洩露定位--memleak工具記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- Android 檢測記憶體洩露Android記憶體洩露
- 如何處理 JavaScript 記憶體洩露JavaScript記憶體洩露
- leaks工具查詢記憶體洩露記憶體洩露
- 記憶體洩露引起的問題記憶體洩露