歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 解決使用pthread_create函數造成的內存洩露

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

日期:2017/3/1 11:10:56   编辑:Linux編程

首先來看一段程序:

  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. void* thread1(void *param)
  9. {
  10. char buff[1024] = {'\0'};
  11. cout << "I am ok" << buff << endl;
  12. }
  13. int main()
  14. {
  15. pthread_t pid[MAX_THREADS];
  16. for(int i = 0; i < MAX_THREADS; i++)
  17. {
  18. pthread_create(&pid[i], NULL, thread1, NULL);
  19. sleep(1);
  20. }
  21. return 0;
  22. }

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


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


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

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

Copyright © Linux教程網 All Rights Reserved