ejeker 发表于 2013-06-28 10:30

[结贴]用pthread_create创建的pthread_t,需要显示的销毁么?

本帖最后由 ejeker 于 2013-07-01 08:59 编辑

文件操作有open/close
但是线程操作似乎只有pthread_create,我没有找到有类似pthread_destroy之类的,对应的函数。

是不是pthread_create只需要创建就可以了,不需要调用某个函数去销毁这个pthread_t?

谢谢。

linux_c_py_php 发表于 2013-06-28 11:18

pthread_join

卖萌犯法 发表于 2013-06-28 11:51

detach线程不需要显示销毁,默认线程需要join

ejeker 发表于 2013-06-28 12:46

卖萌犯法 发表于 2013-06-28 11:51 static/image/common/back.gif
detach线程不需要显示销毁,默认线程需要join

是不是父线程可以不调用pthread_join而只用pthread_detach(child_thread_id)(非阻塞,可立即返回)这样处理?

ejeker 发表于 2013-06-28 12:51

linux_c_py_php 发表于 2013-06-28 11:18 static/image/common/back.gif
pthread_join

我不想在每个子线程里面pthread_detatch(pthread_self())
而是希望在创建子线程的时候就指定好unjoinable属性。如何做到?

ejeker 发表于 2013-06-28 17:55

顶一下!。。。

timespace 发表于 2013-06-28 18:00

本帖最后由 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);

卖萌犯法 发表于 2013-07-01 09:17

回复 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);

ejeker 发表于 2013-07-01 11:27

卖萌犯法 发表于 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]
查看完整版本: [结贴]用pthread_create创建的pthread_t,需要显示的销毁么?