首先來看一段程序:
- //test1.cc
- #include <iostream>
- #include <pthread.h>
- #include <unistd.h>
- #include <stdio.h>
- using namespace std;
- const int MAX_THREADS = 10000;
-
- void* thread1(void *param)
- {
- char buff[1024] = {'\0'};
- cout << "I am ok" << buff << endl;
- }
-
- int main()
- {
- pthread_t pid[MAX_THREADS];
- for(int i = 0; i < MAX_THREADS; i++)
- {
- pthread_create(&pid[i], NULL, thread1, NULL);
- sleep(1);
- }
-
- return 0;
- }
程序剛開始運行時內存截圖:
程序運行一段時間後內存截圖:
從上面兩個截圖中比較會發現,程序test1使用的內存越來越多,到底是什麼原因造成的內存洩露呢?
因為在默認情況下通過pthread_create函數創建的線程是非分離屬性的,由pthread_create函數的第二個參數決定,在非分離的情況下,當一個線程結束的時候,它所占用的系統資源並沒有完全真正的釋放,也沒有真正終止。只有當pthread_join函數返回時,該線程才會釋放自己的資源。而在分離屬性的情況下,一個線程結束會立即釋放它所占用的資源。