当前位置: 技术问答>linux和unix
关于线程创建的疑惑??????????
来源: 互联网 发布时间:2016-04-14
本文导语: 为说明主要问题,简单写出主要代码 -----------------------------服务器端 void* ThreadProc(void * Param); int main(int argc, char* argv[]) { socket() bind() listen() while (1) { int client_socket = accept(..); pthread_...
为说明主要问题,简单写出主要代码
-----------------------------服务器端
void* ThreadProc(void * Param);
int main(int argc, char* argv[])
{
socket()
bind()
listen()
while (1)
{
int client_socket = accept(..);
pthread_t thrd;
pthread_create(&thrd,NULL,ThreadProc,(void *)&client_socket)
}
}
void* ThreadProc(void * Param)
{
...
return NULL;
}
客户端不停的连接服务器端,服务器端创建一定数量的线程后,pthread_create()就失败。这个可能是因为系统资源有限。但是线程执行的
任务非常有限,几乎会立刻返回,如果等待很长的时间后,再次连接服务器端,此时线程仍然创建失败,这个时候系统的资源应该早已被释放了,为什么依然创失败呢?
-----------------------------服务器端
void* ThreadProc(void * Param);
int main(int argc, char* argv[])
{
socket()
bind()
listen()
while (1)
{
int client_socket = accept(..);
pthread_t thrd;
pthread_create(&thrd,NULL,ThreadProc,(void *)&client_socket)
}
}
void* ThreadProc(void * Param)
{
...
return NULL;
}
客户端不停的连接服务器端,服务器端创建一定数量的线程后,pthread_create()就失败。这个可能是因为系统资源有限。但是线程执行的
任务非常有限,几乎会立刻返回,如果等待很长的时间后,再次连接服务器端,此时线程仍然创建失败,这个时候系统的资源应该早已被释放了,为什么依然创失败呢?
|
线程分为“可联合的”(默认)和“可分离的”。可联合的线程终止后,系统将保留其线程ID和退出状态直到另一个线程调用 pthread_join()函数。与之相反,可分离的线程退出后,系统将释放其所有资源,其他线程也无法等待其终止。
估计你是没有调用 pthread_detach()函数将线程设置为“可分离的”。
建议这样写试试:
pthread_t thrd;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&thrd,&attr,ThreadProc,(void *)&client_socket)
估计你是没有调用 pthread_detach()函数将线程设置为“可分离的”。
建议这样写试试:
pthread_t thrd;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&thrd,&attr,ThreadProc,(void *)&client_socket)