Отдельные потоки и утечка памяти
Может кто-нибудь объяснить мне, почему этот простой код утечки памяти?
Я полагаю, что, поскольку pthreads создаются с отключенным состоянием, их ресурсы должны быть освобождены сразу после его завершения, но это не так.
Моя среда Qt5.2.
#include <QCoreApplication>
#include <windows.h>
void *threadFunc( void *arg )
{
printf("#");
pthread_exit(NULL);
}
int main()
{
pthread_t thread;
pthread_attr_t attr;
while(1)
{
printf("\nStarting threads...\n");
for(int idx=0;idx<100;idx++)
{
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create( &thread, &attr, &threadFunc, NULL);
pthread_attr_destroy ( &attr );
}
printf("\nSleeping 10 seconds...\n");
Sleep(10000);
}
}
ОБНОВИТЬ:
Я обнаружил, что если я добавлю небольшую задержку в 5 миллисекунд внутриfor
петля утечкаПУТЬ помедленнее:
for(int idx=0;idx<100;idx++)
{
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create( &thread, &attr, &threadFunc, NULL);
pthread_attr_destroy ( &attr );
Sleep(5); /// <--- 5 MILLISECONDS DELAY ///
}
Это меня бесит, может кто-нибудь сказать, что происходит? Как эта небольшая задержка может привести к таким значительным изменениям? (или изменить поведение любым способом)
Любой совет будет принята с благодарностью.
Благодарю.
UPDATE2:
Эта утечка наблюдалась на платформах Windows (W7 и XP), утечки на платформах Linux не наблюдалось (спасибо @MichaelGoren)