- 论坛徽章:
- 0
|
好像还是不能释放资源
为了验证大家的方法,我作料一个小的测试程序如下(由于是从别的例子程序改造过来的,存在部分程序啰嗦,请别追究,谢谢,请重点关注线程释放部分的 程序)
# include <stdio.h>
# include <errno.h>
# include <pthread.h>
# include <unistd.h>
# define THREAD_NUM 2
void *my_thread(void *arg)
{
pthread_t id;
int *nump;
int num;
int retval;
nump=(int *)(arg);
num=*nump;
printf("thread %d:started\n",num);
id=pthread_self();
printf("thread %d:ID is %d\n",num,id);
int k =0;
//等2秒退出线程
while(k<2)
{
k++;
usleep(1000000);
}
retval=100+num;
printf("thread %d:exit with %d\n",num,retval);
pthread_cancel(id) ;
//pthread_exit(&retval);
//////////////BBB处
}
int main()
{
int count;
pthread_t thread[THREAD_NUM+1];
int *retval[THREAD_NUM+1];
int arg[THREAD_NUM+1];
count=1;
printf("Create thread %d\n",count);
arg[count]=count;
pthread_attr_t attr;
pthread_attr_init( &attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
int oldstate;
// pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, &oldstate );
// pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS, &oldstate );
pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS,NULL );
if(pthread_create(&thread[count],&attr,my_thread,(void*)(&arg[count]))!=0)
fprintf(stderr,"Count not create thread %d:%s\n",count,strerror(errno));
//if(pthread_join(thread[count],(void **)(&retval[count]))!=0)
// fprintf(stderr,"No thread %d to join:%s\n", count,strerror(errno));
//else
// printf("Thread %d retuned %d\n",count,*retval[count]);
count++;
//////////////AAA处
int k =0;
//等10秒退出主进程
while(k<10)
{
k++;
usleep(1000000);
}
exit(0);
}
程序运行结果是:
程序运行到//////////////BBB处时线程资源没有释放,只有等程序等了10秒后退出主进程才释放了线程资源,而且有时还没完全释放,请教一下大家,为什么呀?
我把例子程序发到附件中,请大家一定帮个忙指点一下 |
|