码迷,mamicode.com
首页 > 其他好文 > 详细

thread_5

时间:2014-09-27 01:05:09      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   sp   div   问题   on   

#include<stdlib.h>
#include<pthread.h>
#include<stdio.h>
#include<sched.h>
#include<errno.h>
void *consumer(void *p)
{
      static a = 0;
      a++;
      printf("<<<<(%u),%d\n", (unsigned)pthread_self(), a);
         pthread_detach(pthread_self());
          return NULL;
} 
/*获取线程标识符
pthread_t pthread_self(void);
返回调用线程的标识符,(是一个无符号整形数)*/      
 int main(int argc, char *argv[])
{
        pthread_t  t1, t2, t3;
        int ret;
        do{ 
                ret = pthread_create(&t1, NULL, consumer, NULL);
                if(ret != 0)
               {
                         printf("create failed,%d\n", ret);
                        exit(1);
               }  
             printf("<<<<<");     
         }while(1);
      
      
      return 0;
}  
/*运行结果:只能创建一千个左右的线程,如下
<<<<<<<<<<<<<<<<<<<<<(3128908688),1184
<<<<<<<<<<<<<<<<<<<<<(3137301392),1185
<<<<<<<<<<<<<<<<<<<<<(3145694096),1186
create failed,12
分析原因可能是主线程创建线程速度太快,子线程还来不及释放资源,最终导致资源不足, */
//下面在主函数里面加一个printf(),就不会出问题了。


/*总结如下:
1.线程自己运行结束,或者调用pthread_exit()结束,线程都会释放自己独立的空间资源。
2.如果线程是非分离的,线程会保留线程id号,直到其他线程通过"joining"这个线程确认其已死亡。join 的结果是joining 线程得到已终止线程的退出状态,已终止的线程将消失。*/


/*pthread_detach
编辑
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
但是调用pthread_join(pthread_id)后,如果该线程没有运行结束,调用者会被阻塞,在有些情况下我们并不希望如此,比如在Web服务器中当主线程为每个新来的链接创建一个子线程进行处理的时候,主线程并不希望因为调用pthread_join而阻塞(因为还要继续处理之后到来的链接),这时可以在子线程中加入代码
pthread_detach(pthread_self())
或者父线程调用
pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。*/

/*比较线程ID
int pthread_equal(pthread_t tid1, pthread_t tid2);
如果tid1 和tid2 相等,pthread_equal() 将返回非零值,否则将返回零。如果tid1 或tid2 是无效的线程标识号,则结果无法预测。
*/

 

thread_5

标签:style   blog   color   io   ar   sp   div   问题   on   

原文地址:http://www.cnblogs.com/leijiangtao/p/3995769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!