Я разрабатываю приложение на C в среде Linux. Я заметил, что следующий код теряет тонны памяти после сотен выполнений:
do {
pthread_t flushThread;
pthread_attr_t attr;
logevent_thread_t logThread = { Db , &do_curl };
if (( pthread_attr_init ( &attr ) == 0 ) &&
( pthread_attr_setdetachstate ( &attr , PTHREAD_CREATE_DETACHED ) == 0 ) ) {
pthread_create ( &flushThread , &attr , (void*)FlushThread , (void*)&logThread );
pthread_attr_destroy ( &attr );
}
} while(1);
Когда я начал с кода, я использовал только pthread_create (), но когда я заметил утечку, я запустил google'd и выполнил поиск в StackOverflow и нашел следующие URL:
Вот почему я инициализирую атрибуты и запускаю поток "отсоединен". Я также уничтожаю атрибуты.
Я не могу использовать pthread_join (), так как я не хочу блокирующий вызов, я хочу, чтобы мой поток жил сам по себе.
К сожалению, утечка все еще есть. У меня больше нет идей, и я получу дальнейшие советы!
Спасибо!
@ arrowdodger: Вызов pthread_detach () без установки каких-либо атрибутов также приводит к утечке.
Я также попытался с setdetach и pthread_detach () без успеха.
@ drhirsch: Я знаю, что он протекает, потому что, когда он запускается в течение 1 дня, у меня возникает паника ядра "Out Of Memory". Кроме того, используя top, я вижу все больше и больше воспоминаний, посвященных моему процессу (но я понимаю, что лучший способ контролировать это - использовать valgrind).