小威
...

  1.一个进程可以包含多个线程,线程是进程的子集

  2.同一进程的多个线程共享同一个地址空间

      共享资源 : 

          文件描述符表

          每种信号的处理方式(SIG_IGN, SIG_DFL, 或者自定义的信号处理函数)

          当前工作目录  

          用户id和组id

      不共享资源 :

          线程id

          上下文, 包括寄存器的值, 程序计数器和栈指针

          栈空间

          errno变量

          信号屏蔽字

          调度优先级

  3.在Linux上线程函数位于libpthread共享库中,在编译时需要加上 -lpthread选项

  4.pthread_create

      函数原型 : #include <pthread.h>

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

      调用 : pthread_self   可以获得当前线程的id

      如果任意一个线程调用了exit 或_exit, 则整个进程的所有线程都终止

  5.终止线程的方法 : 

        从线程函数 return , 这种方法对主线程不适用, 从main函数return相当于调用exit

        一个线程一个调用pthread_cancel终止同一个进程中的另一个线程

        线程可以调用pthread_exit终止自己

  6.函数原型 : #include <pthread.h>

        void pthread_exit(void *value_ptr);

      注意 ; pthread_exit或者return 返回的指针所指向的内存单元必须是全局的,或者是malloc分配的

        #include <pthread.h>

        int pthread_join(pthread_t thread, void **value_ptr);

            如果thread线程通过return返回, value_ptr所指向的单元里存放的是thread线程函数的返回值

            如果thread线程被别的进程调用pthread_cancel异常终止掉, value_ptr所指向的单元里存放的是常数PTHREAD_CANCELED

            如果thread线程是自己调用pthread_exit终止的, value_ptr所指向的单元存放的是传给pthread_exit的参数

  7。函数原型 : #include <pthread.h>

          int pthread_detach (pthread_t tid);

      不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL, 对一个尚未detach的线程调用pthread_join或pthread_detach都可以把该线程设置为detach转台

posted on 2013-09-16 18:16  小威_  阅读(136)  评论(0编辑  收藏  举报