Может кто-нибудь, пожалуйста, объясните мне, почему этот простой код утечки памяти?
Я считаю, что, поскольку pthreads создаются с отключенным состоянием, их ресурсы должны быть выпущены inmediatly после его завершения, но это не так.
Моя среда 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);
}
}
UPDATE:
Я обнаружил, что если я добавлю небольшую задержку в 5 миллисекунд внутри цикла for
, утечка будет WAY медленнее:
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)