释放线程空间的两种方式

1.将线程设置为可分离属性的,

1>使用pthread_detach(线程id),

2>调用pthread_attr_t 

pthread_attr_t  attr;//在pthread_creat之前调用。

pthread_attr_init(&attr);

pthread_attr_setdetachstate(&attr,  PTHREAD_CREATE_DETACHED);

pthread_create(&pthreadid,  &attr,  myprocess,  &arg);

 

2.因为线程默认是joinable的,所以调用pthread_join(线程id,一个二级指针) ,

这个函数的返回值要么成功返回0。要么是失败返回error。

这个函数缺点是需要阻塞等待 ,不过这个函数可以获取到线程结束时候的状态,使用第二个参数,这个第二个参数指向一个指针,而指向的这个指针是指向函线程的返回值的。也即是这个pthread_join的返回值的。从而根据返回值获取线程的结束状态。

线程类型 说明
可连接的线程 能够被其他线程回收或杀死,在其被杀死前,内存空间不会自动被释放
可分离的线程 不能被其他线程回收或杀死,其内存空间在它终止时由系统自动释放

比较:

对于可连接的线程而言,它不会自动释放其内存空间,必须对该线程使用 pthread_join()才能释放其内存空间。

对于可分离的线程而言,该线程运行结束后会自动释放所有资源。

 

你可能感兴趣的:(linux)