Linux线程理论

一、线程概念

  轻量级的进程,在Linux环境下,其本质仍是进程。

  特点:拥有独立的PCB进程控制块,多个线程贡享虚拟地址空间。

  线程共享资源:1、文件描述符  2、信号处理方式  3、当前工作目录  4、用户ID和组ID  5、内存地址空间

  线程非共享资源:1、线程ID  2、处理器现场和栈指针(内核栈)  3、独立的栈空间(用户空间栈)  4、error变量  5、信号屏蔽字  6、调度优先级

  线程优缺点:

    优点:1、提高程序并发性  2、开销小  3、数据通信、共享数据方便(可以直接使用全局变量) 

    缺点:1、库函数,不稳定  2、调试、编写困难,gdb不支持  3、对信号支持不好

 

二、线程控制原语

  /*获取线程ID*/

  pthread_t pthread_self(void);   /*pthread_t在linux下可理解为unsigned long int类型*/

  /*创建线程*/

  int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);

    参数1:传出参数,保存系统分配的线程ID;

    参数2:线程默认属性,是一个传入结构体类型的指针。

        typedef struct

         {

            int          etachstate;  //线程的分离状态

            int          schedpolicy;  //线程调度策略

            struct sched_param  schedparam;  //线程的调度参数  

            int          inheritsched;  //线程的继承性

            int          scope;    //线程的作用域

            size_t        guardsize;  //线程栈末尾的警戒缓冲区大小

            int          stackaddr_set;  //线程的栈设置

            void*        stackaddr;  //线程栈的位置

            size_t        stacksize;  //线程栈的大小

          }pthread_attr_t;

  /*退出单个线程*/

  void pthread_exit(void *retval);  /*retval传出参数,获取线程退出状态*/

  /*阻塞等待线程退出,并且获取线程退出状态*/

  int pthread_join(pthread_t thread,void **retval);  /*传出参数,获取pthread_exit函数的传出参数*/

  /*实现线程分离状态*/

  int pthread_detach(pthread_t thread);  /*线程结束后会自动回收它所占用的资源*/

  /*杀死线程*/

  int pthread_cancel(pthread_t thread);  /*需要等待线程到达某个检查点,可粗略认为一个系统调用

                    假如没有取消点,可通过调用pthread_testcancel函数设置*/

  /*比较两个线程是否相等*/

  int pthread_equal(pthread_t t1,pthread_t t2);

    

 

 

 

  

posted @ 2016-06-22 00:30  追风的影  阅读(164)  评论(0)    收藏  举报