多线程问题(关于pthread_join()用法)
环境:ubuntu6.06+gcc4.0.3
我想要写一个基于多线程的程序代码如下(请注意加注释的地方):
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
void *pthr(void *str)
{
printf( "frist %d\n ", (int)str);
sleep(3);
printf( "again %d\n ", (int)str);
return NULL;
}
int main()
{
pthread_t pth;
int i;
for (i = 0; i < 500; ++i)
{
pthread_create(&pth, NULL, pthr, (void *)(i));
pthread_join(pth, NULL);//这里!!!
}
sleep(10);
return 0;
}
这个代码可以执行,但是因为“pthread_join(pth, NULL);//这里!!!”这句的存在,它并不是一个真正意义上的多线程,因为它总是创建一个线程然后等待它结束,再重复(这是我个人的理解),但这不是我想要的情况(我想要的是多个线程一同执行)。于是我把“pthread_join”这条去掉(在我想,当线程结束时,它应该自动释放资源)可是实际运行时程序只创建了382条线程就结束了。
我的问题是:
1.线程的创建有上限吗,如果没有,这个程序为什么会只创建了382个线程就结束了。
2.当线程结束时(不调用pthread_join)会不会将所有资源释放。
3.如果我同时运行多个线程,如何管理它,(我不想象本例子这样,创建 一个,等待结束,再创建下一个)
[解决办法]
如果你需要的是分离线程序,就没必要join了.
如果不是,那么就按你例子上那样就不错.设置一个状态,
用一个线程做回收线程,有处于死亡状态的线程序就join