7月7日笔记-线程

2015年07月07日

学习内容出自:一步步学习Linux多任务编程

  • 进程和线程的区别与联系
    进程:只是维护应用程序所需的各种资源 线程:执行实体
  • 多线程实现多任务
    线程号只在它所属的进程环境中有效
    获取线程号: pthread_t pthread_self(void);
    线程号的比较:int pthread_equal(pthread_t t1,pthread_t t2);
    返回值:相等则非0
    线程的创建:
    int pthread_create(pthread_t *thread,const pthread_attr_t *addr,void *(*start_routine)(void *),void *arg);
    回收线程
    1、阻塞
    int pthread_join(pthread_t thread,void **retval)
    retval:用来存储线程退出状态的指针的地址
    2、非阻塞函数回收资源
    int pthread_datach(pthread_t thread);
    使调用线程与当前线程分离,当被分离的线程结束后,系统会自动回收它的资源
    线程的退出
    void pthread_exit(void *retval);
    retval:存储线程退出状态的指针
  • 线程私有数据
    其中一个线程对全局变量的修改将影响到另一个线程的访问
    创建线程私有数据
    int pthread_key_create(pthread_key_t *key,void (*destructor)(void*));
    注销线程的私有数据
    int pthread_key_delete(pthread_key_t key);
    设置线程私有数据关联
    int pthread_setspecific(pthread_key_t key,const void *value);
    注:是将key与value的值(而不是内容相关联)
    读取线程私有数据所关联的值
    void *pthread_getspecific(pthread_key_t key);
  • 线程池
    线程池的组成:线程管理器、工作线程、任务接口、任务队列
    需创建线程池的情况:创建线程和销毁时间相比任务执行时间多很多