歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

解決使用pthread_create函數造成的內存洩露

首先來看一段程序:

  1. //test1.cc   
  2. #include <iostream>   
  3. #include <pthread.h>   
  4. #include <unistd.h>   
  5. #include <stdio.h>   
  6. using namespace std;  
  7. const int MAX_THREADS = 10000;  
  8.   
  9. void* thread1(void *param)  
  10. {  
  11.     char buff[1024] = {'\0'};  
  12.     cout << "I am ok" << buff << endl;  
  13. }  
  14.   
  15. int main()  
  16. {  
  17.     pthread_t pid[MAX_THREADS];  
  18.     for(int i = 0; i < MAX_THREADS; i++)  
  19.     {  
  20.     pthread_create(&pid[i], NULL, thread1, NULL);  
  21.     sleep(1);  
  22.     }  
  23.   
  24.     return 0;  
  25. }  

程序剛開始運行時內存截圖:


程序運行一段時間後內存截圖:


從上面兩個截圖中比較會發現,程序test1使用的內存越來越多,到底是什麼原因造成的內存洩露呢?

因為在默認情況下通過pthread_create函數創建的線程是非分離屬性的,由pthread_create函數的第二個參數決定,在非分離的情況下,當一個線程結束的時候,它所占用的系統資源並沒有完全真正的釋放,也沒有真正終止。只有當pthread_join函數返回時,該線程才會釋放自己的資源。而在分離屬性的情況下,一個線程結束會立即釋放它所占用的資源。

Copyright © Linux教程網 All Rights Reserved