你建立的线程在退出后是否释放了资源呢?
当你需要建立许多线程(虽然已经退出)后发现无法再建立(通常在服务器程序设计等地方用到),到这时才想到要如何正确的建立线程就。。。。。。
通常有两种情况:1.需要等待线程的退出;2.不能等待退出。线程的也是建立于以下两种状态1.“joinable state”
(它的值为PTHREAD_CREATE_JOINABLE);2.“detached state” (值为PTHREAD_CREATE_DETACHED)。在默认情况下
“joinable state”。
对第一种情况的正确做法的例子如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
void* child(void* arg)
{
... ...
return arg;
}
int main(void)
{
pthread_t t;
if (pthread_create(&t, &a, child, NULL)){
perror("create");
}
pthread_join(t, NULL);
}
对第二情况的正确做法的例子如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
void* child(void* arg)
{
... ...
return arg;
}
int main(void)
{
pthread_t t;
pthread_attr_t a;
//这里设置为“detached state”
pthread_attr_init(&a);
pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
if (pthread_create(&t, &a, child, NULL)){
perror("create");
}
... ... //做其它事情
}