[结贴]用pthread_create创建的pthread_t,需要显示的销毁么?
本帖最后由 ejeker 于 2013-07-01 08:59 编辑文件操作有open/close
但是线程操作似乎只有pthread_create,我没有找到有类似pthread_destroy之类的,对应的函数。
是不是pthread_create只需要创建就可以了,不需要调用某个函数去销毁这个pthread_t?
谢谢。 pthread_join detach线程不需要显示销毁,默认线程需要join 卖萌犯法 发表于 2013-06-28 11:51 static/image/common/back.gif
detach线程不需要显示销毁,默认线程需要join
是不是父线程可以不调用pthread_join而只用pthread_detach(child_thread_id)(非阻塞,可立即返回)这样处理? linux_c_py_php 发表于 2013-06-28 11:18 static/image/common/back.gif
pthread_join
我不想在每个子线程里面pthread_detatch(pthread_self())
而是希望在创建子线程的时候就指定好unjoinable属性。如何做到? 顶一下!。。。 本帖最后由 timespace 于 2013-06-28 18:02 编辑
回复 5# ejeker
这类需求太常见,以至于有单独的API,man或google下用法
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);
回复 5# ejeker
pthread_attr_t attr;
当主线程启动出时:
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&tid, &attr, Thread_Entry_Function,NULL);
当主线程退出时:
pthread_attr_destroy (&attr);
卖萌犯法 发表于 2013-07-01 09:17 static/image/common/back.gif
回复 5# ejeker
pthread_attr_t attr;
谢谢,按照你说的,做了修改。新的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#include <unistd.h>
using namespace std;
void exe_exit1(void *arg)
{
printf("%s:arg=%s\n",__FUNCTION__,(char *)arg);}
void exe_exit2(void *arg)
{
printf("%s:arg=%s\n",__FUNCTION__,(char *)arg);
}
void *func(void*)
{
printf("thread start\n");
pthread_cleanup_push(exe_exit2,static_cast<void*>(const_cast<char*>("For exe_exit1")));
pthread_cleanup_push(exe_exit1,static_cast<void*>(const_cast<char*>("For exe_exit2")));
printf("pthread_cleanup_push ok\n");
printf("pthread_cleanup_pop begin\n");
pthread_cleanup_pop(1);
pthread_cleanup_pop(1);
return NULL;
}
int main()
{
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_create(&tid,&attr,func,NULL);
pthread_attr_destroy(&attr);
sleep(1);
exit(0);
}
运行结果如我所预期的那样。
页:
[1]