QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1170|回复: 4

[求助]多线程编程线程创建后该如何释放

[复制链接]
发表于 2006-1-20 16:10:11 | 显示全部楼层 |阅读模式
下边是我自己写的一段测试用的代码,
在线程创建后不知道该如何释放掉已经创建的线程,
到后来线程就创建不出来了,
请问该如何解决,用什么函数才能将线程释放



#include<stdio.h>
#include<pthread.h>

typedef struct _LOGBUF
{
        char query[1024];
}LOGBUF,*pLOGBUF;

void db_log(void)
{
        printf("[%d],db_log,",pthread_self());  
}

void write_db()
{
        pthread_t th1;
        pthread_create(&th1,NULL,(void *)&db_log,NULL);
        printf("[%d],write_db\n",pthread_self());

}

inse(char *str,int *i,int *j,int size)
{
        int k;
        LOGBUF data[2][size];
        if (*j>=0)
        {
                strcpy(data[*i][*j].query,str);
        }
        *j = *j + 1;
        if (*j>=size)
        {
                for(k=0;k<size;k++)
                   {
                    write_db();
                   }  
                *i = !*i;
                *j = 0;
        }
}

main()
{
        int i=0,j=0,size=1;
        int *a=&i,*b=&j;
        char str[1024];
        while(1)
                {
                        printf("%d,%d input str :",*a,*b);
                        scanf("%s",str);
                        inse(str,a,b,size);
                }
}
发表于 2006-1-21 21:33:42 | 显示全部楼层
不太清楚你说的是什么情况,我试了你的代码,也调试了一下,没发现有什么问题。
关于linux下的线程,有几点说明,当你create线程时,操作系统默认会为你产生一个监控进程(我的是这样的,现在据说在改),也就是说当你第一次调用pthread_create后,用ps -ef查看时会出现两个同名进程,第一个就是你的程序,第二个进程是第一个进程的孩子,就是监控进程,此后每个新创建的线程都是这个进程的孩子,linux下线程有自己的线程id和进程id,你用pthread_self得到的是线程id,用getpid得到是进程id,线程也在占用系统的进程id,而系统进程id是在循环使用的,应该不会完。如果你确实想中止线程的执行,可以在线程函数的最后调用void pthread_exit(void *value_ptr)函数,在创建线程中如果想得到返回值使用int pthread_join(pthread_t tid,void **status)函数。
祝你成功!
回复

使用道具 举报

发表于 2006-1-21 23:34:28 | 显示全部楼层
用pthread_detach()剥离,然后就那个线程就可以自生自灭了
回复

使用道具 举报

 楼主| 发表于 2006-1-23 10:25:58 | 显示全部楼层
谢谢各位的帮忙,我的这个程序在我的机器上测的时候大概开出260个左右的现成时就开不出来了,所以想考虑一下怎么才能把线程完全释放掉

3楼的仁兄我用pthread_detach()是这样用的,但是剥离不掉,麻烦帮我看一下

void write_db()
{
pthread_t th1;
pthread_create(&th1,NULL,(void *)&db_log,NULL);
printf("[%d],write_db\n",pthread_self());
pthread_detach(th1)
}
回复

使用道具 举报

 楼主| 发表于 2006-1-23 12:41:55 | 显示全部楼层
问题已经解决了,谢谢各位仁兄指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:18 , Processed in 0.043539 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表