分类: LINUX
2006-09-15 09:35:08
今天到公司查看昨天晚上程序运行的结果, 发现pthread_create返回错误12 (Cannot allocate memory)。原因是主线程里没有调用pthread_join函数或 在线程函数中没有调用pthread_detach(pthread_self());这样线程没有被回收。写程序测试了一下:
#include
#include
#include
void *func(void* arg)
{
if (*(int*)arg == 1)
pthread_detach(pthread_self());
return NULL;
}
int main(int argc, char* argv[])
{
int i = 0;
int flag = 0;
if (argc != 3)
{
printf("Usage: %s NUM FLAG\n", argv[0]);
return -1;
}
flag = atoi (argv[2]);
while ( i < atoi(argv[1]))
{
int status;
i++;
printf("i= %d\n", i);
pthread_t id;
status = pthread_create(&id, NULL, func, &flag);
if (status != 0 )
{
printf("%d %s\n", status, strerror(status));
return -1;
}
}
return 0;
}
gcc pthread_create_test.c -o pthread_create_test -lpthread